我對如何使用聚合來獲得非常特定型別的結果有點迷茫。我的資料庫檔案具有以下格式
{
_id: 122434
houseDetails: {
hasBedroom: {
flag: true,
},
hasKitchen: {
flag: false
},
hasBalcony: {
flag: false
},
hasFoyer: {
flag: true
},
}
}
(這是一個檔案結構的基本示例,細節不同)
我正在嘗試查詢嵌套houseDetails屬性為真的所有檔案。所以最后我希望結果看起來像
{
_id: 122434,
houseDetails: [hasBedroom, hasFoyer]
}
我可以使用 $match 來查找至少有一個屬性為 true 的所有檔案,但我似乎不知道如何僅將值為 true 的名稱投影到陣列中。
uj5u.com熱心網友回復:
一種選擇是:
- 用于
$objectToArray從鍵和值創建陣列 $filter它只保留true值- 用于
$map格式化專案
db.collection.aggregate([
{$project: {houseDetails: {$objectToArray: "$houseDetails"}}},
{$project: {
houseDetails: {
$filter: {
input: "$houseDetails",
cond: {$eq: ["$$this.v.flag", true]}
}
}
}
},
{$project: {
houseDetails: {
$map: {
input: "$houseDetails",
in: "$$this.k"
}
}
}
}
])
看看它在操場上的例子是如何作業的
您也可以使用$reduce僅通過兩個步驟來執行此操作:
db.collection.aggregate([
{$project: {houseDetails: {$objectToArray: "$houseDetails"}}},
{$project: {
houseDetails: {
$reduce: {
input: "$houseDetails",
initialValue: [],
in: {
$setUnion: [
"$$value",
{$cond: [{$eq: ["$$this.v.flag", true]}, ["$$this.k"], []]}
]
}
}
}
}
}
看看它在操場上的例子是如何作業的 - 減少
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/503985.html
標籤:节点.js mongodb 猫鼬 mongodb查询 聚合框架
上一篇:如何檢查文本檔案中是否存在資料,如果存在,則不得保存相同的資料并顯示一條訊息,說明資料已存在
下一篇:貓鼬訂單受歡迎程度(按總評分)
