这是我的用户架构:
var UserSchema = new Schema({
name:String,
groups: [String]
});
我希望 x 组中所有用户的名称数组。
例如数据集:
[
{
"name":"a",
"groups":[
"1",
"2"
]
},
{
"name":"b",
"groups":[
"3x",
"4"
]
},
{
"name":"c",
"groups":[
"1",
"4"
]
},
{
"name":"d",
"groups":[
"2",
"3"
]
},
{
"name":"e",
"groups":[
]
}
]
我需要结果:
for group 1:
["a","c"]
for group 2:
["a","d"]
for group 3:
["b","d"]
for group 4:
["c"]
for group 5:
[]
是否可以像这样编写查询?怎么做?
答案 0 :(得分:0)
安静简单,只需要两个阶段的聚合操作。
代码:
db.t.aggregate([
{$unwind:"$groups"},
{$group:{"_id":"$groups","names":{$addToSet:"$name"}}}
])
示例结果:
{ "_id" : "3x", "names" : [ "b" ] }
{ "_id" : "4", "names" : [ "c", "b" ] }
{ "_id" : "2", "names" : [ "d", "a" ] }
{ "_id" : "3", "names" : [ "d" ] }
{ "_id" : "1", "names" : [ "c", "a" ] }