OK、MongoDBの専門家、私のコレクションを見てください:
[{
"_id" : "item_0",
"Name" : "Item 0",
"Description" : "Some description for this item...",
"Properties" : {
"a" : 5.0,
"b" : 0.0,
"c" : 6.0,
"d" : 6.0,
"e" : 2.0,
"f" : 0.0,
"g" : 9.0,
"h" : 3.0,
"i" : 4.0,
"j" : 5.0
}
},
{ // 5.000-10.000 more items... }
]
この集計を使用して、選択したプロパティのセット(この場合はa、b、c、d)を乗算し、それらを積で並べ替えています。
{
"aggregate": "item",
"pipeline": [
{
"$project": {
"_id": 1,
"Name": 1,
"s": {
"$multiply": [
"$Properties.a",
"$Properties.b",
"$Properties.c",
"$Properties.d"
]
}
}
},
{
"$sort": {
"s": -1
}
},
{
"$limit": 100
}
]
}
これで問題なく動作しますが、アイテムとプロパティの数が増えると、集計の実行時間が大幅に長くなります。
このようなことを達成するためのより良い方法(より効率的な)はありますか?最高の製品(プロパティのセットの複数)の検索は迅速でなければなりません。プロパティのすべての異なる組み合わせを使用してこれにインデックスを付け、それらをキャッシュする方法がある場合はどうでしょうか。クエリが高速である限り、インデックス作成に時間がかかることは問題ありません。
この件に関してご協力いただきありがとうございます。ありがとうございました。