L'obtention de la plus haute valeur d'une colonne dans MongoDB
J'ai été pour une aide sur l'obtention de la valeur la plus élevée sur une colonne pour un mongo document. Je peux trier et obtenir le haut/le bas, mais je suis assez sûr qu'il y est une meilleure façon de le faire.
J'ai essayé le suivant (et différentes combinaisons):
transactions.find("id" => x).max({"sellprice" => 0})
Mais il continue à jeter des erreurs. Ce qui est une bonne façon de le faire en dehors de tri et d'obtenir le haut/bas?
Merci!
- Vous devez inclure les erreurs c'est jeter.
Vous devez vous connecter pour publier un commentaire.
max() ne fonctionne pas de la façon que vous attendez qu'il en SQL pour les Mongo. Cela va peut-être changer dans les futures versions, mais comme de maintenant, max,min, sont à utiliser avec indexé touches principalement à l'interne pour la fragmentation.
voir http://www.mongodb.org/display/DOCS/min+et+max+Requête+Prescripteurs
Malheureusement pour l'instant la seule façon d'obtenir la valeur max est de trier la collection desc sur cette valeur et de prendre le premier.
De tri peut être exagéré. Il vous suffit de faire un groupe par
Exemple mongodb shell code pour le calcul des agrégats.
voir mongodb entrée de manuel pour le groupe (nombre de demandes) :: http://docs.mongodb.org/manual/reference/aggregation/group/#stage._S_group
Dans le ci-dessous, remplacer le $vars avec votre collection de clés et variable cible.
Utilisation aggregate():
Il fonctionnera selon votre condition.
Si la colonne est indexée ensuite, un tri doit être OK, en supposant que Mongo juste utilise l'index pour obtenir une collection ordonnée. Sinon, c'est plus efficace pour effectuer une itération sur la collecte, à la conservation de la note de la plus grande valeur perçue. par exemple,
(Toutes mes excuses si mon Ruby est un peu ropey, je ne l'ai pas utilisé depuis longtemps, mais l'approche générale devrait être clair à partir du code.)
En supposant que j'ai été en utilisant le Rubis pilote (j'ai vu un mongodb-ruby balise sur le bas), j'aimerais faire quelque chose comme si je voulais obtenir le maximum de
_id
(en supposant que ma_id
est triable). Dans mon œuvre, mon_id
est un entier.Pour obtenir le minimum
_id
dans la collection, il suffit de changer:desc
à:asc
result = my_collection.find_one({}, :sort => ['_id', :desc])
Requête suivante fait la même chose:
db.student.find({}, {'_id':1}).sort({_id:-1}).limit(1)
Pour moi, cela a produit le résultat suivant:
{ "_id" : NumberLong(10934) }