我目前需要使用聚合框架对MongoDB执行查询。 这是我的文件图表以及我希望提出的要求。
tools
{
"_id": 1,
"code": "TOOL_1",
"label": "Tool 1",
"items": [
{
"code_it": TOOL_1_TT_1,
"label": "Tool TT 1",
"value": 25.00
},
{
"code_it": TOOL_1_TT_2,
"label": "Tool TT 2",
"value": 17.00
},
{
"code_it": TOOL_1_TT_3,
"label": "Tool TT 3",
"value": 17.00
},
]
}
results_tools
{
"_id": 1,
results: [
{
"code_it": "TOOL_TT_2",
"owner": "person_A"
},
{
"code_it": "TOOL_TT_3",
"owner": "person_D"
},
{
"code_it": "TOOL_TT_2",
"owner": "person_C"
},
]
}
db.results_tools.aggregate([
{ $unwind: "$results" },
{
$lookup: {
from: "tools",
let: { res_cod_it: "$code_it" },
pipeline: [
{ $unwind: "$items" },
{
$match: {
$expr: {
$eq: [ "$$res_cod_it", "$code_it" ]
}
}
}
],
as: "item"
}
},
{
$project: {
"owner": 1,
"el.code": "code_it",
"el.label": "item.label",
"el.value": "item.label"
}
}
]);
我希望能够根据结果检索工具的标签。 但是,我在运行时遇到错误,所以我想知道是否可以在$ lookup管道中使用$ unwind。
感谢您的回答。 劳伦
答案 0 :(得分:0)
您可以使用以下管道。请注意使用点表示法来引用数组字段。
db.results_tools.aggregate([
{"$unwind":"$results"},
{"$lookup":{
"from":"tools",
"let":{"res_cod_it":"$results.code_it"},
"pipeline":[
{"$unwind":"$items"},
{"$match":{"$expr":{"$eq":["$$res_cod_it","$items.code_it"]}}}
],
"as":"item"
}},
{"$unwind":"$item"},
{"$project":{
"owner":"$results.owner",
"code":"$item.items.code_it",
"label":"$item.items.label",
"value":"$item.items.value"
}}
])