【发布时间】:2020-08-03 21:25:16
【问题描述】:
如果集合 (sales) 内的orders 数组包含一个具有status 属性值delivered 的对象,我需要使用addField 聚合查询添加一个completed 属性。
db.sales.insertMany([
{
"_id" : 1,
"salesId" : "2938432",
"customerId" : "987677789",
"amount:"23000"
"orders":[{
orderId:"TX8383428979382",
status:"cancelled"
},
{
orderId:"TX8383428979383",
status:"fullfilled"
}]
},
{
"_id" : 1,
"salesId" : "2938433",
"customerId" : "987676578",
"amount:"13000"
"orders":[
{
orderId:"TX838342892437363",
status:"placed"
}]
},
.........
)]
我的汇总查询
db.sales.aggregate([
{$match:{....}},
{$addFields:{
completed: {
$cond: { if: { /* code to check if orders array contains an object with `status:fullfilled` }, then: true, else: false }
}
}},
])
如何检查对象数组中的属性是否匹配?
【问题讨论】:
-
您可以将$map 聚合运算符与
$addFields阶段一起使用。$map将让您遍历orders数组,您可以检查数组的每个元素的条件并在匹配时添加新属性。 -
谢谢@prasad_。似乎我也可以减少。但我无法把它写成代码。如果你能举个例子会很有帮助
-
您想在哪里添加
completed属性?对于“订单”子文档或根/顶级?
标签: arrays node.js mongodb mongodb-query