J'ai une collection:mongodb comment obtenir un document qui a une valeur maximale de chaque « groupe avec la même clé »
{'_id':'008','name':'ada','update':'1504501629','star':3.6,'desc':'ok', ...}
{'_id':'007','name':'bob','update':'1504501614','star':4.2,'desc':'gb', ...}
{'_id':'005','name':'ada','update':'1504501532','star':3.2,'desc':'ok', ...}
{'_id':'003','name':'bob','update':'1504501431','star':4.5,'desc':'bg', ...}
{'_id':'002','name':'ada','update':'1504501378','star':3.4,'desc':'no', ...}
{'_id':'001','name':'ada','update':'1504501325','star':3.6,'desc':'ok', ...}
{'_id':'000','name':'bob','update':'1504501268','star':4.3,'desc':'gg', ...}
...
si je veux que le résultat est, la valeur maximale de la « mise à jour » du même « nom », signifie le nouveau document « nom », obtenir le document entier:
{'_id':'008','name':'ada','update':'1504501629','star':3.6,'desc':'ok', ...}
{'_id':'007','name':'bob','update':'1504501614','star':4.2,'desc':'gb', ...}
...
Comment le faire le plus efficace?
je le fais maintenant en python est:
result=[]
for name in db.collection.distinct('name'):
result.append(db.collection.find({'name':name}).sort('update',-1)[0])
est il ne 'trouver' trop de fois?
=====
Je le fais pour les données d'exploration avec « nom », obtenir beaucoup d'autres clés, et chaque fois que j'insérer un document, je mis une clé nommée « mise à jour ». Lorsque j'utilise la base de données, je veux le plus récent document de 'nom' spécifique. donc ça ne peut pas simplement utiliser $ group. Comment dois-je faire? re concevoir la structure db ou mieux trouver?
=====
amélioré!
J'ai essayé de créer l'index de 'nom' & 'mise à jour', le processus est raccourci d'une demi-heure à 30 secondes!
Mais je me réjouis encore pour une meilleure solution^_^
merci pour votre réponse. J'ai essayé l'agrégation, mais si vous utilisez $ group, en tant que votre méthode, je peux obtenir 3 clés seulement.Mais je veux tout le document, pas seulement le '_id'. Hier, j'ai essayé d'une autre façon, utilisez l'agrégation $ trier toutes les données dans la collection, charger en python et supprimer les doublons. Le processus a été raccourci à 6 secondes. Mais maintenant, la collection a 120k + documents, et 26k 'nom' unique serait prendre à chaque fois. Si la collection devient plus grande, prendre des données de collection entières devrait être plus lent. –
ou shold J'écris toutes les clés dans $ group? J'ai plus de 40 touches ... –
Bien, j'ai essayé de lister toutes les clés dans le groupe $, il a utilisé 25 secondes, la même chose que ma vieille méthode. –