我有一個包含名稱值對的物件串列,但我無法弄清楚如何從名稱為特定值的陣列中檢索值。
例如:
{
"ordernumber" : "192915",
"orderparameters" : {
"list" : [
{
"composite" : null,
"name" : "CURRENCY_CODE",
"value" : "NOK",
"type" : "String"
},
{
"composite" : null,
"name" : "NEED_CUSTOMS_DOCUMENT",
"value" : "True",
"type" : "Boolean"
}
]}
}
現在我需要找到專案的價值
"name": "NEED_CUSTOMS_DOCUMENT"
所以在這種情況下
“值”:“真”
我可以列出所有值
db.orders.aggregate({ $match: { ordernumber:'1234' } }, { $project: { 'orderparameters.list.name': 1 } }).pretty()
但是如何從具有該名稱的索引中檢索值欄位呢?
每個檔案的索引可能不同,所以我不能簡單地查詢“orderparameters.list.1.value”
uj5u.com熱心網友回復:
優化您的聚合管道以包含帶有$filter運算子的另一個階段,并允許您根據給定條件過濾串列,如下所示:
db.orders.aggregate([
{ $match: {
ordernumber: "1234",
"orderparameters.list.name": "NEED_CUSTOMS_DOCUMENT"
} },
{ $project: {
list: {
$filter: {
input: "$orderparameters.list",
cond: { $eq: ["$$this.name", "NEED_CUSTOMS_DOCUMENT"] }
}
}
} },
{ $project: { values: "$list.value" } }
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362985.html
上一篇:按月聚合組并按給定年份匹配
