2013-03-30 11 views
1

J'ai une collection mongodb qui a une collection avec un champ tag et date.MongoDb Query - Count + où condition

Je veux compter le nombre de toutes les balises qui peuvent être faites par cette requête

db.collection.count({ tags: "abc" }) 

Mais je voudrais obtenir compte de tous les tags uniques ensemble. Et je veux aussi mettre une condition where sur la date, comme dans Je veux interroger pendant une certaine période de temps.

Répondre

1

Une approche très simple:

db.collection.distinct("tags", {dateField: {$gt: dateValue}}).forEach(function (tag) { 
    var count = db.collection.count({"tags" : tag}) 
}) 
1

Vous pouvez utiliser la structure d'agrégation mongoDD pour résoudre ce problème (http://docs.mongodb.org/manual/applications/aggregation/). Au cas où vous n'obtiendriez pas tout. vous avez toujours la possibilité de le faire via map-reduce (http://docs.mongodb.org/manual/applications/map-reduce/). J'ai utilisé map-reduce pour créer mes propres options de recherche pour les besoins particuliers. Donc n'importe quel point de temps map-reduce vous aidera à faire ce que vous voulez faire ce qui n'est pas possible par simple requête. Je ne donne pas la requête parce que je n'ai pas beaucoup d'informations sur la façon dont vous voulez obtenir les données et comment votre collection ressemble, mais les deux options vous aideront à l'obtenir très facilement.

0

Vous devez utiliser une combinaison de trouver et de compter

db.collection.find({condition}).count