db.getCollection(‘collectionA’).aggregate([
{
$match: {…}
}, {
$project: {
“code”:1,
“targetArray”:1,
“flag”: {
$cond: {
if: {“$targetArray”:{$eleMatch:{$in:[“value1″,”value2”]}}},
then: “0”,
else: “1”
}
}
}
}])
如上,对返回字段 targetArray 进行处理,包含 value1 或者 value2 的文档,应该返回 flag 字段。但是这里的语法存在问题,执行不通过,求大佬赐教,这里应该怎么写才能实现?
不知道这个是否满足你要求
shard1:PRIMARY> db.xiaojing.aggregate({$project:{name:1,targetArray:1,flag:{$cond:{if:{$eq:[{$filter:{input:”$targetArray”,as:”item”,cond:{$in:[“$$item”,[1,2]]}}},[]]},then: “0”,else: “1”}}}})
{ “_id” : ObjectId(“62b15ca9d68d46c54481b3df”), “targetArray” : [ 1, 2 ], “name” : “xiaoxu”, “flag” : “1” }
{ “_id” : ObjectId(“62b15cb3d68d46c54481b3e0”), “targetArray” : [ 1, 3 ], “name” : “xiaojing”, “flag” : “1” }
{ “_id” : ObjectId(“62b160cbd68d46c54481b3e1”), “targetArray” : [ 4, 3 ], “name” : “xiaobao”, “flag” : “0” }
shard1:PRIMARY> db.xiaojing.find();
{ “_id” : ObjectId(“62b15ca9d68d46c54481b3df”), “targetArray” : [ 1, 2 ], “name” : “xiaoxu” }
{ “_id” : ObjectId(“62b15cb3d68d46c54481b3e0”), “targetArray” : [ 1, 3 ], “name” : “xiaojing” }
{ “_id” : ObjectId(“62b160cbd68d46c54481b3e1”), “targetArray” : [ 4, 3 ], “name” : “xiaobao” }
shard1:PRIMARY>