我是 mongodb 的新手。
我的查找給了我以下結果,我如何使用 mongodb 聚合過濾下面的結果以獲得 expected_delivery_time:
[
{
"from":"Jeddah",
"delivery_rule":[
{
"to":"Makkah",
"expected_delivery_time":3
},
{
"to":"Riyadh",
"expected_delivery_time":2
}
]
},
{
"from":"Riyadh",
"delivery_rule":[
{
"to":"Makkah",
"expected_delivery_time":3
},
{
"to":"Riyadh",
"expected_delivery_time":1
}
]
}
]
下面是我的代碼:
$lookup:
{
from: "Setting",
pipeline: [
{
$match:
{
$expr:
{ $eq: ["$name", "delivery_rules"] }
}
}
],
as: "delivery_rules"
}
},
{ "$match": { "$delivery_rules.value.from": "Jeddah" } },
{ "$match": { "$delivery_rules.value.to": "Riyadh" } },
我需要以下 MySQL 等價物的幫助
SELECT 'expected_delivery_time' WHERE from='Jeddah' AND to='Makkah'
uj5u.com熱心網友回復:
根據$lookup階段,我預計結果檔案應該是:
[
{
"from": "Jeddah",
"delivery_rules": [
{
"to": "Makkah",
"expected_delivery_time": 3
},
{
"to": "Riyadh",
"expected_delivery_time": 2
}
]
},
{
"from": "Riyadh",
"delivery_rules": [
{
"to": "Makkah",
"expected_delivery_time": 3
},
{
"to": "Riyadh",
"expected_delivery_time": 1
}
]
}
]
delivery_rules(帶有“s”,但您共享的檔案是帶有delivery_rule)
兩者delivery_rules.value.from都不delivery_rules.value.to存在。并且您不應該根據您的查詢$在 stage 中使用該欄位。$match
$lookup$match- 過濾器from和delivery_rules.to。將2 個$match階段合并為 1 個階段。$project- 裝飾輸出檔案。添加expected_delivery_time欄位:3.1。-從結果3.1.1 中
$getField獲取欄位。expected_delivery_time3.1.1。- 從結果3.1.1.1陣列中
$first獲取第一個值。3.1.1.1。- 使用陣列中的“Makkah”
$filter過濾檔案。todelivery_rules
db.collection.aggregate([
/* Lookup stage */
{
"$match": {
"from": "Jeddah",
"delivery_rules.to": "Riyadh"
}
},
{
$project: {
expected_delivery_time: {
"$getField": {
"field": "expected_delivery_time",
"input": {
$first: {
$filter: {
input: "$delivery_rules",
cond: {
$eq: [
"$$this.to",
"Makkah"
]
}
}
}
}
}
}
}
}
])
示例 Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484516.html
上一篇:如何在查詢中參考檔案的欄位值?
