想象一下mongodb上的以下集合:
{ id: 1, array1: [ObjectId("1001"), ObjectId("1002")],
array2: [ObjectId("1003"), ObjectId("1004")] }
{ id: 2, array1: [ObjectId("1001"), ObjectId("1004")],
array2: [ObjectId("1002")] }
{ id: 3, array1: [ObjectId("1003"), ObjectId("1004")],
array2: [ObjectId("1005")] }
{ id: 4 }
现在我想创建一个这样的投影:
db.coll.aggregate([{ $project:
{ setInAnyArray: { ObjectId("1002") : { $in: ["$array1", "$array2"] }}}
}]);
结果应该是:
{ id: 1, setInAnyArray: true }
{ id: 2, setInAnyArray: true }
{ id: 3, setInAnyArray: false }
{ id: 4, setInAnyArray: false }
你怎么解决这个问题?非常感谢你!
答案 0 :(得分:3)
使用.aggregate()
方法。
您需要$project
您的文档并使用$setUnion
返回一个包含任何数组中出现的元素的集合。您还需要$setIsSubet
,因为$in
阶段不允许$project
。最后但并非最不重要的是,您应该使用$ifNull
运算符为缺少这些字段的文档设置默认值,否则您的查询将失败。
Kurento Java Tutorial - Hello World Version 6.2.1