MongoDB, MapReduce und Sortieren

Ich bin vielleicht ein bisschen überfordert, da ich immer noch die Vor- und Nachteile von MongoDB lerne, aber es geht los.

Im Moment arbeite ich an einem Tool zum Suchen / Filtern eines Datensatzes, Sortieren nach einem beliebigen Datenpunkt (z. B. Beliebtheit) und Gruppieren nach einer ID. Die einzige Möglichkeit, dies zu tun, ist die MapReduce-Funktionalität von Mongo.

Ich kann .group () nicht verwenden, da ich mit mehr als 10.000 Schlüsseln arbeite und auch in der Lage sein muss, den Datensatz zu sortieren.

Mein MapReduce-Code funktioniert einwandfrei, abgesehen von einer Sache: Sortieren. Sortieren will einfach gar nicht funktionieren.

db.runCommand({
  'mapreduce': 'products',
  'map': function() {
    emit({
      product_id: this.product_id,
      popularity: this.popularity
    }, 1);
  },
  'reduce': function(key, values) {
    var sum = 0;
    values.forEach(function(v) {
      sum += v;
    });

    return sum;  
  },
  'query': {category_id: 20},
  'out': {inline: 1},
  'sort': {popularity: -1}
});

Ich habe bereits einen absteigenden Index für den Beliebtheitsdatenpunkt, daher funktioniert er definitiv nicht.

{ "v" : 1, "key" : { "popularity" : -1 }, "ns" : "app.products", "name" : "popularity_-1" }

Ich kann nur nicht herausfinden, warum es nicht sortieren will.

Anstatt die Ergebnismenge zu inlinen, kann ich sie nicht in einer anderen Sammlung ausgeben und dann eine .find (). -Sort ({popularität: -1}) ausführen, da diese Funktion funktionieren wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage