我期望通過最小化要放鬆的記錄數來優化MongoDB性能。Mongodb展開和匹配VS匹配和解開
我不喜歡:
unwind(injectionRecords),
match("machineID" : "machine1"),
count(counter)
,因爲龐大的數據,但放鬆操作需要花費大量的時間,然後從開卷相匹配。 它展開所有4條記錄,然後從結果中匹配machineID,並給我數。
相反,我想這樣做:
match("machineID": "machine1"),
unwind(injectionRecords)
count(counter)
因此,它會匹配具有設備ID記錄和放鬆的只有2個而不是4個,並給了我它的計數。
這可能嗎?我怎樣才能做到這一點?
下面是樣本文檔,
{
"_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