MongoDB, MapReduce i sortowanie

Mogę być trochę nad tym na głowie, ponieważ wciąż uczę się tajników MongoDB, ale tutaj idzie.

Obecnie pracuję nad narzędziem do wyszukiwania / filtrowania zbioru danych, sortowania go według dowolnego punktu danych (np. Popularność), a następnie grupowania go według identyfikatora. Jedynym sposobem, w jaki mogę to zrobić, jest skorzystanie z funkcji MapReduce Mongo.

Nie mogę użyć .group (), ponieważ pracuję z więcej niż 10 000 kluczy i muszę także mieć możliwość sortowania zestawu danych.

Mój kod MapReduce działa dobrze, z wyjątkiem jednej rzeczy: sortowania. Sortowanie po prostu nie chce działać.

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}
});

Mam już malejący indeks w punkcie danych popularności, więc zdecydowanie nie działa z powodu braku tego:

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

Po prostu nie mogę zrozumieć, dlaczego nie chce sortować.

Zamiast wstawiać zestaw wyników, nie mogę wyprowadzić go do innej kolekcji, a następnie uruchomić w tym celu plik .find (). Sort ({popularność: -1}) ze względu na sposób działania tej funkcji.

questionAnswers(2)

yourAnswerToTheQuestion