无法在MongoDB中为子字段添加表达式

时间:2016-09-21 06:32:17

标签: node.js mongodb mongoose aggregation-framework

这是我的代码。

   Cart
        .aggregate()
        .match(where)
        .lookup({
            from: "product_catelogs",
            foreignField: "_id",
            localField: "product_id",
            as: "product"
        })
        .project({
          product: {
            $arrayElemAt: ["$product", 0]
          },
          "product.custom_field": {
            $add: [1, 1]
          },
          product_quantity: 1,
          product_variant: 1,
          guest_token: 1,
          user_id: 1,
          product_id: 1,
        })

在此我想添加一个带有产品对象的自定义字段。但是当我试图这样做时,我正面临着这种错误,

  

无法为产品的子字段添加表达式,因为存在   已经是一个适用于整个领域的表达式

请帮帮我。

1 个答案:

答案 0 :(得分:1)

我担心你能解决这个问题的唯一方法就是添加另一个项目管道,该管道将product嵌入字段的投影与新字段分开。一个例子如下:

Cart.aggregate()
    .match(where)
    .lookup({
        "from": "product_catelogs",
        "foreignField": "_id",
        "localField": "product_id",
        "as": "product"
    })
    .project({
        "product": { "$arrayElemAt": ["$product", 0] },
        "product_quantity": 1,
        "product_variant": 1,
        "guest_token": 1,
        "user_id": 1,
        "product_id": 1,
    })
    .project({
        "product.field1": "$product.field1", // <-- change to suit your actual schema
        "product.field2": "$product.field2",
        "product.field3": "$product.field3",
        "product.field4": "$product.field4",
        "product.custom_field": { "$add": ["$product.field4", "$product.field5"] },
        "product_quantity": 1,
        "product_variant": 1,
        "guest_token": 1,
        "user_id": 1,
        "product_id": 1,
    })