Mongodb Agrégation comte de tableau/taille de l'ensemble

Voici mon problème:

Modèle:

{ application: "abc", la date: le Temps.maintenant, statut: "1" user_id: [ id1, id2,
id4] }

{ application: "abc", la date: le Temps.hier, l'état: "1", user_id: [
id1, id3, id5] }

{ application: "abc", la date: le Temps.hier-1, état: "1", user_id: [
id1, id3, id5] }

J'ai besoin de compter le nombre unique de user_ids dans une période de temps.

Résultat attendu:

{ application: "abc", statut: "1", unique_id_count: 5 }

Je suis actuellement en utilisant l'agrégation cadre de comptage et de l'id de l'extérieur de mongodb.

{ $match: { application: "abc" } }, { $détendez-vous: "$users" }, { $group:
{ _id: { statut: "$statut"},
utilisateurs: { $addToSet: "$users" } } }

Mes tableaux d'utilisateurs de l'ids sont très grandes, donc je dois parcourir les dates ou je vais obtenir le maximum de document de la limite (16 mo).

Je pourrais aussi $groupe par

{ an: { $année: "$date" }, month: { $mois: "$date" }, jour: {
$dayOfMonth: "$date" }

mais j'ai également le document de limitation de taille.

Est-il possible de compter la taille du jeu dans mongodb?

grâce

- Vous avez plus de 16 mo de l'ids par l'utilisateur, ou vous avez plus de 16mbs de données de tous les enregistrements? Si cette dernière condition, les sorties, vous pouvez essayer de vider le résultat d'une sortie de la collection.
Les utilisateurs de tableau/taille de l'ensemble est plus que mille, et id utilisateur sont similaires à object_ids (50b9d949816e6e37060005c2). La version précédente a été à l'aide de map/reduce) et une sortie de la collection. C'était terriblement lent. Comptage en mémoire est plus rapide que l'écriture d'une sortie de la collection.
Et quelle est la performance lorsque vous effectuez une analyse de la table et de ne récupérer que les applications et les champs nom d'utilisateur. Bien sûr, le comptage en mémoire est plus rapide, mais vous avez des limitations avec mongo, autant que je sache, si la sortie ne rentre pas dans la mémoire de rinçage de disque ou de faire une analyse de la table est de votre seule option.
La performance est acceptable. Je souhaite juste une façon de calculer une matrice de taille et de ne pas revenir à l'ensemble des contenus.

OriginalL'auteur user2019059 | 2013-01-28