这是我的代码。
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,
})
在此我想添加一个带有产品对象的自定义字段。但是当我试图这样做时,我正面临着这种错误,
无法为产品的子字段添加表达式,因为存在 已经是一个适用于整个领域的表达式
请帮帮我。
答案 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,
})