28 votes

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 n'arrête pas de jeter des erreurs. Ce qui est une bonne façon de le faire en dehors de tri et d'obtenir le haut/bas?

Merci!!!!

48voto

Michael Papile Points 4679

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.

transactions.find("id" => x).sort({"sellprice" => -1}).limit(1).first()

19voto

Mayur Rustagi Points 171

Le tri peut être exagéré. Il vous suffit de faire un group by

db.messages.group(
           {key: { created_at:true },
            cond: { active:1 },
            reduce: function(obj,prev) { if(prev.cmax<obj.created_at) prev.cmax = obj.created_at; },
            initial: { cmax: **any one value** }
            });

8voto

user2418693 Points 81
db.collectionName.aggregate(
  {
    $group : 
    {
      _id  : "",
      last : 
      {
        $max : "$sellprice"
      }
    }
  }
)

5voto

jatal Points 118

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é et de la variable cible.

db.activity.aggregate( 
  { $group : {
      _id:"$your_collection_key", 
      min: {$min : "$your_target_variable"}, 
      max: {$max : "$your_target_variable"}
    }
  } 
)

3voto

Vincent Points 5364

L'utilisation d'agrégation():

db.transactions.aggregate([
  {$match: {id: x}},
  {$sort: {sellprice:-1}},
  {$limit: 1},
  {$project: {sellprice: 1}}
]);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X