我有一個關于貓鼬的查詢
const result = await modelProfile.findOne(
{
_id: profileId,
},
{ 'payItems.ACId': 1 }
);
組態檔示例是
{
"firstName": "ABC",
"lastName": "DEF",
"payItems": [
{
"ACId": {
"$oid": "6168825c5d0edbc0b61615db"
},
"balance": 0,
"rate": 0
}, {
"ACId": {
"$oid": "6168825c5d0edbc0b61615dc"
},
"balance": 1,
"rate": 2
}]
}
當我運行它時,它回傳以下正確的結果:
{ payItems:
[
{ ACId: ObjectId("6168825c5d0edbc0b61615db") },
{ ACId: ObjectId("6168825c5d0edbc0b61615dc") }
]
}
這是正確的,有什么方法可以讓 MongoDB 回傳“沒有鍵”這樣的東西(ID 陣列)?
[
ObjectId("6168825c5d0edbc0b61615db"),
ObjectId("6168825c5d0edbc0b61615dc")
]
uj5u.com熱心網友回復:
您可以為此使用聚合管道。您可以在此處查看此查詢的實時演示
就像是:
const result = await modelProfile.aggregate([
{
"$match": {
"_id": profileId
}
},
{
"$group": {
"_id": null,
"payItems": {
"$push": "$payItems.ACId"
}
}
},
{
"$project": {
"_id": 0,
"payItems": 1
}
}
])
回傳:
[
{
"payItems": [
[
ObjectId("6168825c5d0edbc0b61615db"),
ObjectId("6168825c5d0edbc0b61615dc")
]
]
}
]
更新
您可以在此處查看現場演示
新查詢
db.collection.aggregate([
{
"$match": {
"_id": 1
}
},
{
"$group": {
"_id": null,
"payItems": {
"$push": "$payItems.ACId"
}
}
},
{
"$project": {
"_id": 0,
"payItems": 1
}
},
{
"$unwind": "$payItems"
}
])
新結果
[
{
"payItems": [
ObjectId("6168825c5d0edbc0b61615db"),
ObjectId("6168825c5d0edbc0b61615dc")
]
}
]
細節
This means you will have to do something like this:
const results = await modelProfile.aggregate([
{
"$match": {
"_id": 1
}
},
{
"$group": {
"_id": null,
"payItems": {
"$push": "$payItems.ACId"
}
}
},
{
"$project": {
"_id": 0,
"payItems": 1
}
},
{
"$unwind": "$payItems"
}
]);
results.forEach((result) => {
// result.payItems has the ids you are looking for
// If you know you only want the first item in the array
// just do:
// const result = results[0];
// result.payItems.forEach(item => {...});
result.payItems.forEach((id) => {
console.log(id);
});
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/325172.html
標籤:mongodb 猫鼬 mongodb-查询 聚合框架
上一篇:在MongoDB中創建新資料庫
