我的 MongoDB 檔案結構如下:
{
"_id": "5d8b987f9f8b9f9c8c8b9f9",
"targetsList": [
{
"target": "user",
"statusList": [
{
"date": "2018-01-01",
"type": "OK"
},
{
"date": "2018-01-02",
"type": "FAILD"
}
]
}
]
}
我想計算所有檔案,在他們的“targetList”陣列中,有一個帶有“target”==“user”的物件 - 以及它的“statusList”陣列的最后一個元素上的物件conatin,一個帶有“type”的物件" != "失敗" .
關于如何實作這種查詢的任何想法?
Mongo Playground: https ://mongoplayground.net/p/3bCoHRnh-KQ 在這個例子中,我期望計數為 1,因為只有第二個物件滿足條件。
uj5u.com熱心網友回復:
聚合管道
第一步- 過濾出"targetsList.target": "user"
第二步$unwind的位置-targetsList將其從陣列中取出
第三步-targetsList.statusList使用$arrayElemAt
第四步獲取陣列的最后一個元素- 獲取最后一個元素不失敗的結果
第五步- 獲取計數
演示- 您可以嘗試洗掉部分管道以查看中間結果是什么
db.collection.aggregate([
{
$match: {
"targetsList.target": "user"
}
},
{
$unwind: "$targetsList"
},
{
$project: {
"targetsList.statusList": {
$arrayElemAt: [
"$targetsList.statusList",
-1
]
},
}
},
{
$match: {
"targetsList.statusList.type": {
$ne: "FAILD"
}
}
},
{
$count: "withoutFailedInLastElemCount"
}
])
uj5u.com熱心網友回復:
除非該元素是最后一個索引至關重要,否則這應該適用于您的情況。
db.collection.find({
"targetsList.statusList.type": {
$in: [
"FAILD"
]
}
})
這將檢索type值為 的檔案FAILD。要反轉這個,你可以$in換成$nin.
在這里更新游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/427368.html
下一篇:如何使貓鼬區分大小寫?
