Tri après Map/reduce avec inline résultat
Après avoir essayé ce solution et d'obtenir un pas de plus j'ai une autre question concernant l'mongodb.
Ma question est:
Comment puis-je trier la sortie de:
doc = {_id : 16, days : { 1 : 123, 2 : 129, 3 : 140, 4 : 56, 5 : 57, 6 : 69, 7 : 80 }};
db.so.insert(doc);
map = function() {
emit(this._id, this.days["1"]);
emit(this._id, this.days["3"]);
emit(this._id, this.days["7"]);
}
reduce = function (k, vals) {
var sum = 0;
vals.forEach(function (v) {sum += v;});
return sum;
}
res = db.so.mapReduce(map, reduce, {out : {inline : 1}});
res.find();
La Sortie ressemble à ceci:
"results" : [
{
"_id" : 16,
"value" : 225
},
{
"_id" : 33,
"value" : 230
},
{
"_id" : 302,
"value" : 274
}
]
Maintenant, je veux trier le résultat avec:
res.find().sort({ "results.value":-1 });
qui entraîne cette erreur:
Sat Mar 31 01:15:45 TypeError: res.find().sort({'results.value':-1}) is not a function (shell):1
Quelqu'un peut m'aider ?
OriginalL'auteur MadeOfSport | 2012-03-30
Vous devez vous connecter pour publier un commentaire.
Voici un exemple de la même requête à l'aide de la MongoDB 2.2 L'Agrégation Cadre:
.. et la sortie:
OriginalL'auteur Stennie
Cela ne fonctionne pas de cette façon avec
inline
résultats. Au lieu de cela, essayez d'écrire à une collection, puis en exécutant un tri sur cette collection.Oui, je crois que vous pouvez le faire avec l'agrégation cadre. On dirait que vous
$project
la_id
et lasum
et ensuite utiliser le$sort
. Cela devrait être assez facile à tester que 2.1 est disponible pour le téléchargement.Vous avez raison. Cela fonctionne très bien
OriginalL'auteur Gates VP
Vous pouvez tout à fait en sorte que le
results
attribut:OriginalL'auteur OcuS