parent
							
								
									704ce76c11
								
							
						
					
					
						commit
						c34b3cc9f9
					
				@ -0,0 +1,31 @@ | 
				
			|||||||
 | 
					package common | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ( | 
				
			||||||
 | 
						"github.com/mainnika/mongox-go-driver/mongox" | 
				
			||||||
 | 
						"github.com/mainnika/mongox-go-driver/mongox/errors" | 
				
			||||||
 | 
						"github.com/mainnika/mongox-go-driver/mongox/query" | 
				
			||||||
 | 
						"github.com/mongodb/mongo-go-driver/mongo" | 
				
			||||||
 | 
						"github.com/mongodb/mongo-go-driver/mongo/options" | 
				
			||||||
 | 
					) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Count function counts documents in the database by query
 | 
				
			||||||
 | 
					// target is used only to get collection by tag so it'd be better to use nil ptr here
 | 
				
			||||||
 | 
					func Count(db *mongox.Database, target interface{}, filters ...interface{}) (int64, error) { | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						collection := db.GetCollectionOf(target) | 
				
			||||||
 | 
						opts := options.Count() | 
				
			||||||
 | 
						composed := query.Compose(filters...) | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opts.Limit = composed.Limiter() | 
				
			||||||
 | 
						opts.Skip = composed.Skipper() | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result, err := collection.Count(db.Context(), composed.M(), opts) | 
				
			||||||
 | 
						if err == mongo.ErrNoDocuments { | 
				
			||||||
 | 
							return 0, errors.NotFoundErrorf("%s", err) | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
						if err != nil { | 
				
			||||||
 | 
							return 0, errors.InternalErrorf("can't decode desult: %s", err) | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return result, nil | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue