我在 mongoDB 中有以下 bson 資料
{
name : "company 1",
createPurchaseOrder :[
{
partyName : "p1",
poNumber : "789",
},
{
partyName : "p2",
poNumber : "700",
},
{
partyName : "p3",
poNumber : "889",
},
{
partyName : "p1",
poNumber : "800",
},
{
partyName : "p1",
poNumber : "200",
},
]
}
我想要來自partyName 的物件,例如如果partyName 是p1,那么我想要這個
[
{
partyName: 'p1',
poNumber: '789',
},
{
partyName: 'p1',
poNumber: '800',
},
{
partyName: 'p1',
poNumber: '200',
},
];
我試過這個
const user1 = await User.findOne({name : "company 1"},{createPurchaseOrder:{$elemMatch:{partyName:"p1"}}})
它只給了我第一個匹配的物件,然后我嘗試了這個
const user1 = await User.find({name : "company 1"},{createPurchaseOrder:{$elemMatch:{"partyName.$":"p1"}}})
它回傳一個空陣列。請幫我解決這個我想要的解決方案,它給我所有具有匹配值的物件
uj5u.com熱心網友回復:
您需要為此使用聚合管道,find
操作員對其可以執行的結構轉換非常有限,例如,使用它無法實作此用例。
只需使用$filter
:
db.collection.aggregate([
{
$match: {
name: "company 1"
}
},
{
$addFields: {
createPurchaseOrder: {
$filter: {
input: {
$ifNull: [
"$createPurchaseOrder",
[]
]
},
cond: {
$eq: [
"$$this.partyName",
"p1"
]
}
}
}
}
},
{
$unwind: "$createPurchaseOrder"
},
{
$replaceRoot: {
newRoot: "$createPurchaseOrder"
}
}
])
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506300.html