如何聚合包含id的数组?

时间:2016-01-07 09:07:34

标签: mongodb aggregation-framework

想象一下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 }
你怎么解决这个问题?非常感谢你!

1 个答案:

答案 0 :(得分:3)

使用.aggregate()方法。

您需要$project您的文档并使用$setUnion返回一个包含任何数组中出现的元素的集合。您还需要$setIsSubet,因为$in阶段不允许$project。最后但并非最不重要的是,您应该使用$ifNull运算符为缺少这些字段的文档设置默认值,否则您的查询将失败。

  
       Kurento Java Tutorial - Hello World
       Version 6.2.1