アンワインドするレコードの数を最小限に抑えることで、MongoDBのパフォーマンスを最適化したいと考えています。MongodbはリバインドしてVSのマッチとアンワインドを行います。
私は好きです。
unwind(injectionRecords),
match("machineID" : "machine1"),
count(counter)
しかし、理由は膨大なデータの操作は多くの時間がかかり、それがアンワインドから一致しておくつろぎください。 これは、4つのレコードすべてを解き、machineIDとresultをマッチさせます。
match("machineID": "machine1"),
unwind(injectionRecords)
count(counter)
だから、それはmachineIDを持つレコードを照合し、唯一の2の代わりに4のをほどくと、私にそれの数を与える:
代わりに、私のような何かをしたいと思います。
これは可能ですか?これどうやってするの?ここで
は、次のクエリが与えられたmachineId
ためinjectionRecords
の数を返します
{
"_id" : ObjectId("5981c24b90a7c215e4f166dd"),
"machineID" : "machine1",
"injectionRecords" : [
{
"startTime" : ISODate("2017-08-02T17:45:04.779+05:30"),
"endTime" : ISODate("2017-08-02T17:45:07.763+05:30"),
"counter" : 1
},
{
"startTime" : ISODate("2017-08-02T17:45:24.417+05:30"),
"endTime" : ISODate("2017-08-02T17:45:27.402+05:30"),
"counter" : 2
}
]
},
{
"_id" : ObjectId("5981c24b90a7c215e4f166de"),
"machineID" : "machine2",
"injectionRecords" : [
{
"startTime" : ISODate("2017-08-02T17:46:04.779+05:30"),
"endTime" : ISODate("2017-08-02T17:46:07.763+05:30"),
"counter" : 1
},
{
"startTime" : ISODate("2017-08-02T17:46:24.417+05:30"),
"endTime" : ISODate("2017-08-02T17:46:27.402+05:30"),
"counter" : 2
}
]
}
アグリゲーションパイプラインを(1)マッチしてから(2)アンワインドすることは確かに可能ですので、特定のマッチ**が実際にデータに適用されるかどうかによって問題が解消される可能性があります。あなたの質問を更新して、サンプル文書と現在のアンワインドとマッチステージを含めることができますか? – glytching
@glitch私の質問に対して最適化されたクエリを投稿できますか? – Pratikmr97
@RicardoRocha 'mongodb'のような単語にはコードの書式を使用しないでください。 [詳細についてはこちらを参照してください](https://meta.stackoverflow.com/a/254995/4244993) – jmattheis