我在 MongoDB 中有一個集合,看起來像這樣
{
"_id": ObjectId("62a2ef1084020f45678c8740"),
"content_id": 436629,
"isLocked": true,
"type": "video",
"created_at": ISODate("2022-06-10T12:43:20.563 05:30"),
"updated_at": ISODate("2022-06-10T12:43:20.563 05:30"),
"__v": 0
}
假設有數千個。content_id現在我有一個來自 diff api的陣列
[{
"content_id": 123456
}, {
"content_id": 456789
}, {
"content_id": 453211
}....]
我想檢查陣列是否有一個 id 集合中存在一個 doc 并滿足條件"isLocked": false并基于它增加一個計數器。一種解決方案是通過 for 或 map 回圈陣列并運行查找查詢以逐個檢查每個檔案,例如
for (let i = 0; i < array.length; i ) {
let result = await db.collection.find({
"content_id": array[i].content_id
});
if (result && result.length > 0 && result[0].isLocked === false) {
counter ;
}
}
這不是一個理想的解決方案,因為它會非常慢。Mongodb 是否有一些東西可以在提高性能的同時達到相同的結果,或者我只剩下這個解決方案了?
uj5u.com熱心網友回復:
使用$in怎么樣?
array = array.map(item => item.content_id) // becomes ["id1", "id2","id3"...]
然后使用以下查詢
let result = await db.collection.find({ "content_id": { $in: array }, isLocked : false })
如果您只想要結果檔案的總數,您可以直接result.length或替換.find為.countDocuments
要獲得更高的性能,請記住索引 content_id isLocked
例如
db.collection.createIndex(
{ content_id: 1, isLocked: 1 } ,
{ name: "Content Id and isLocked" }
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/489427.html
