带有$addFileds和条件的Mongodb聚合
鉴于: db: 我想运行一个脚本,根据聚合结果更新一个新字段。如果其中一个值(val1、val2)为空,则结果为真 下面是我对聚合所做的操作,然后我将检查并更新所有行:带有$addFileds和条件的Mongodb聚合,mongodb,nosql,Mongodb,Nosql,鉴于: db: 我想运行一个脚本,根据聚合结果更新一个新字段。如果其中一个值(val1、val2)为空,则结果为真 下面是我对聚合所做的操作,然后我将检查并更新所有行: db.valTest.aggregate( [{ "$addFields": { "val.selected": { '$or': [{ 'val1.val': ''
db.valTest.aggregate(
[{
"$addFields": {
"val.selected": {
'$or': [{
'val1.val': ''
}, {
'val2.val': ''
}]
}
}
},
{
"$group": {
"_id": "$_id",
"id": {
"$first": "$id"
},
"value": {
"$first": "val1.val"
},
"result": {
"$push": {
"val": "val1.val",
"selected": "val.selected"
}
}
}
}
]
)
但是,我没有得到正确的结果。我希望得到如下结果:
{
id:"112",
val1: {val:""},
val2: {val:"123"},
result: true
},
{
id:"114",
val1: {val:"4545"},
val2: {val:"123"},
result: false
}
目前,我得到以下错误:
"message" : "FieldPath field names may not contain '.'.",
您需要对匹配条件使用聚合运算符
db.collection.aggregate([
{ "$addFields": {
"result": {
"$cond": [
{ "$or": [{ "$eq": ["$val1.val", ""] }, { "$eq": ["$val2.val", ""] }] },
true,
false
]
}
}}
])
db.collection.aggregate([
{ "$addFields": {
"result": {
"$cond": [
{ "$or": [{ "$eq": ["$val1.val", ""] }, { "$eq": ["$val2.val", ""] }] },
true,
false
]
}
}}
])