私はまだMongoDBの内外を学んでいるので、これについては少し頭がおかしいかもしれませんが、ここに行きます.
現在、データセットを検索/フィルタリングし、任意のデータポイント (人気など) で並べ替えてから、ID でグループ化するツールに取り組んでいます。これを行う唯一の方法は、Mongo の MapReduce 機能を使用することです。
私は .group() を使用できません。これは、10,000 を超えるキーを使用しており、データセットを並べ替える必要があるためです。
私の MapReduce コードは、並べ替えという 1 つのことを除いて、問題なく動作しています。並べ替えはまったく機能したくありません。
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}
});
私はすでに人気データポイントに降順のインデックスを持っているので、それがないために機能していないことは間違いありません:
{
"v" : 1,
"key" : { "popularity" : -1 },
"ns" : "app.products",
"name" : "popularity_-1"
}
並べ替えたくない理由がわかりません。
結果セットをインライン化する代わりに、それを別のコレクションに出力してから .find().sort({popularity: -1}) を実行することはできません。これは、この機能が機能する方法のためです。