在嵌入文档数组中查找引用文档

马塞尔·耶施克

我有两个集合。其中一个包含一组对象。这些对象拥有一个字段,其 ID 指向另一个集合中的文档。目标是用文档“替换”ref。听起来很简单,但我不知道如何存档。

例如

“产品”系列

{ "_id": 1,
  "alias": "ProductA"
},
{ "_id": 2,
  "alias": "ProductC"
}

收藏“订单”

{ "_id": 5765,
  "cart": [
    {
      "product": 1,
      "qty": 7
    }, {
      "product": 2,
      "qty": 6
    }
  ]
}

我需要的查询是这样的:

{ "_id": 5765,
  "cart": [
    {
      "product": {
        "_id": 1,
        "alias": "ProductA"
      },
      "qty": 7
    }, {
      "product": {
        "_id": 2,
        "alias": "ProductC"
      },
      "qty": 6
    }
  ]
}

我尝试了一个简单的查找,但数组将只包含产品。我需要改变什么?

{
    $lookup: {
        from: "products",
        let: {
            tmp: "$cart.product"
        },
        pipeline: [
            {
                $match: {
                    $expr: {
                        $in: ["$_id", "$$tmp"]
                    }
                }
            }
        ],
        as: "cart.product"
    }
}

谢谢你的帮助。

普拉萨德_

我添加了一个新$addFields阶段来转换阶段的输出$lookup- 它获得所需的输出:

db.order.aggregate([
{
    $lookup: {
        from: "product",
        let: {
            tmp: "$cart.product"
        },
        pipeline: [
            {
                $match: {
                    $expr: {
                        $in: ["$_id", "$$tmp"]
                    }
                }
            }
        ],
        as: "products"
    }
},
{ 
    $addFields: {
         cart: {
             $map: {
                 input: "$cart", as: "ct",
                 in: {
                     product: {
                         $arrayElemAt: [ 
                             { $filter: {
                                   input: "$products", as: "pr",
                                   cond: {
                                      $eq: [ "$$ct.product", "$$pr._id" ]
                                   }
                              }
                          }, 0 ]
                     },
                     qty: "$$ct.qty"
                 }
             }
         }
    }
}
] ).pretty()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在嵌入文档数组中查找特定字段

在嵌入式数组中按$ in查找文档

嵌入文档数组上的 Mongodb 查找聚合

查找数组中是否存在嵌入式文档,并获取父文档的属性值

如何在数组中查找包含一定数量的嵌入/嵌套文档的文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

从文档引用数组中获取Firestore文档

如何通过引用中的字段查找文档?

如何使用id mongodb在嵌入式文档数组中查找数据?

如何在文档内的数组中获取文档引用

如何通过子文档数组中的数据查找文档

根据数组中单个子文档的字段值查找文档

根据日期在数组中查找文档

引用嵌入在 MS-Word 文档中的 Excel 对象?

PHPMongo - 仅在 MongoDB 中查找并返回匹配的嵌入文档

如何在嵌入式文档中查找某个元素

嵌入文档的查找方法在 symfony mongo 中返回 null

mongodb查找多个引用的文档

基于范围查询MongoDB中嵌入式文档的数组

查询Spring Data MongoDB中嵌入式文档的数组

数组中嵌入式文档的collection更新属性

查询嵌套数组中的元素总数-嵌入文档MongoDB

嵌入式文档数组中的MongoDB Aggregate ObjectId

从文档中查找元素

MongoDB - 在数组字段中查找文档的数组索引

如何从与数组比较的数组字段中查找所有文档

如何更新MongoDB中特定文档的数组内特定嵌入文档的值?

Mongodb:在嵌入文档中搜索

在文档Word中嵌入宏