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
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
Vous devez vous connecter pour publier un commentaire.
La suite du numéro de retour de uniqueUsers par application. Cela va appliquer une opération de groupe à la suite d'une opération de groupe par pipeline à l'aide de la fonctionnalité de mongodb.
J'espère que cela sera fait dans un moyen plus facile dans les versions suivantes de mongo par une commande qui donne la taille d'un tableau en vertu d'une projection.
{$project: {id: "$_id", count: {$size: "$uniqueUsers"}}}
https://jira.mongodb.org/browse/SERVER-4899
Acclamations
Votre exemple {$projet: {id: "$_id", count: {$taille: "$uniqueUsers"}}} a travaillé pour moi dans la version 2.6. Merci!
OriginalL'auteur cubbuk
Désolé, je suis un peu en retard à la fête. Tout simplement le regroupement sur le 'user_id' et en comptant le résultat avec un banal groupe fonctionne et ne fonctionne pas dans la doc des limites de taille.
OriginalL'auteur mjhm