在MongoDB中的一个文档中的两个数组中获取唯一值

时间:2014-12-18 10:29:31

标签: mongodb aggregation-framework

我有以下文件:

{
  userId: 1234,
  contacts: ['a', 'b', 'c', 'd'],
  conversations: ['a', 'b', 'e'],
}

我希望从联系人和会话数组中获得不同的价值。因此,对于这种情况,输出应为:a, b, c, d, e

1 个答案:

答案 0 :(得分:1)

使用$setUnion运算符聚合来自两个数组的值:

db.test.aggregate([
    {$project:{userId:1, values:{$setUnion:['$contacts','$conversations']}}}
])

结果:

{ "userId" : 1234, "values" : [ "a", "b", "c", "d", "e" ] }

更新:对于MongoDB 2.4,您可以在客户端映射每个文档。为数组定义unique函数。然后简单地映射每个文档

db.test.find().map(function(doc) {
   return { 
      userId : doc.userId, 
      values : doc.contacts.concat(doc.conversations).unique()
   };
})

注意:如果有多个文档具有相同的userId,您可以将它们分组到服务器端。