我有以下文件:
{
userId: 1234,
contacts: ['a', 'b', 'c', 'd'],
conversations: ['a', 'b', 'e'],
}
我希望从联系人和会话数组中获得不同的价值。因此,对于这种情况,输出应为:a, b, c, d, e
答案 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,您可以将它们分组到服务器端。