[英]MongoDB - Aggregate with nested array not working
我有 2 collections 使用簡單的嵌套數組。 記錄示例如下所示:
菜單
{
"_id" : ObjectId("620323fe80ec16abea7a0205"),
"name" : "A new menu",
"description" : "",
"menuData" : [
{
"catName" : "Cat 2",
"items" : [
"61ded42461b1d8966c5efc45",
"61ded55001e3cafb8db19198",
"61df9adf2441b6113033f341",
"61dfa8c82441b6113033f738"
]
},
{
"catName" : "Cat 1",
"items" : [
"62020691adda4aab89f1742d",
"61dfa8c82441b6113033f738"
]
}
],
"status" : "active",
}
我正在嘗試完成對菜單項數組 (menuData.items) 的查找。 這些是來自另一個集合的 object 個 ID。
menuitems一個例子是:
{
"_id" : ObjectId("61ded55001e3cafb8db19198"),
"name" : "Coca-Cola 600ml",
"description" : "Refreshing taste...ahhh",
"price" : 3.95,
"tags" : [
"drinks"
],
"options" : [
],
"status" : "active",
}
使用以下聚合,我沒有得到查找的 output
db.getCollection("menus").aggregate(
[
{
"$match" : {
"_id" : ObjectId("620323fe80ec16abea7a0205")
}
},
{
"$addFields" : {
"newField" : "$menuData.items"
}
},
{
"$unwind" : {
"path" : "$newField"
}
},
{
"$lookup" : {
"from" : "menuitems",
"localField" : "newField",
"foreignField" : "_id",
"as" : "items"
}
}
]
);
Output
{
"_id" : ObjectId("620323fe80ec16abea7a0205"),
"name" : "A new menu",
"description" : "",
"menuData" : [
{
"catName" : "Cat 2",
"items" : [
"61ded42461b1d8966c5efc45",
"61ded55001e3cafb8db19198",
"61df9adf2441b6113033f341",
"61dfa8c82441b6113033f738"
]
},
{
"catName" : "Cat 1",
"items" : [
"62020691adda4aab89f1742d",
"61dfa8c82441b6113033f738"
]
}
],
"status" : "active",
"createdBy" : ObjectId("61bb07c778e39ca45c161d81"),
"createdByModel" : "Administrator",
"createdAt" : ISODate("2022-02-09T02:16:30.108+0000"),
"updatedAt" : ISODate("2022-02-09T04:26:00.837+0000"),
"__v" : NumberInt(0),
"newField" : [
"61ded42461b1d8966c5efc45",
"61ded55001e3cafb8db19198",
"61df9adf2441b6113033f341",
"61dfa8c82441b6113033f738"
],
"items" : [
]
}
如您所見,項目是空的。 我嘗試在沒有$addFields
和$unwind
的情況下完成此操作 - 結果相同。
任何幫助是極大的贊賞。
newFields
保存一組 Id 字符串,而menuItems
文檔 Id 是一個ObjectId
)$in
檢查轉換后的id
字符串是否在newFields
數組中。{
"$lookup": {
"from": "menuitems",
let: {
newField: "$newField"
},
pipeline: [
{
$match: {
$expr: {
$in: [
{
$toString: "$_id"
},
"$$newField"
]
}
}
}
],
"as": "items"
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.