我有以下收藏:
{
"invoice": {
"data": [{
"name": "VOUCHERNUMBER",
"value": "59302311"
}, {
"name": "VOUCHERDATE",
"value": "2020-02-20"
}
]
}
},
{
"invoice": {
"data": [{
"name": "VOUCHERNUMBER",
"value": "59112389"
}, {
"name": "VOUCHERDATE",
"value": "2020-02-20"
}
]
}
},
{
"invoice": {
"data": [{
"name": "VOUCHERNUMBER",
"value": "59302378"
}, {
"name": "VOUCHERDATE",
"value": "2020-02-11"
}
]
}
}
我的任務是構建一個查詢,以查找發票編號包含“11”(或任何其他子字串)的所有發票。
所以我構建了以下陳述句:
{"invoice.data.name": "VOUCHERNUMBER", "invoice.data.value": {$regex : "11"} }
我期待前兩個物件的結果,但由于第三個物件中的第二個值,mongodb 將所有三個物件都回傳給我。然后我嘗試
{$and : [{"invoice.data.name": "VOUCHERNUMBER"}, {"invoice.data.value": {$regex : "11"}}]}
了相同的結果......
所以我的想法不多了。是否有解決方案僅在相應的“名稱”欄位包含“VOUCHERNUMBER”的值欄位中搜索字串?
uj5u.com熱心網友回復:
你需要$elemMatch.
$elemMatch 運算子匹配包含至少一個元素匹配所有指定查詢條件的陣列欄位的檔案。
db.collection.find({
"invoice.data": {
"$elemMatch": {
"name": "VOUCHERNUMBER",
"value": {
$regex: "11"
}
}
}
})
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350932.html
下一篇:貓鼬如何自動生成另一組Id?
