我正在尝试将3个集合合并在一个集合中,但无法使其工作(与所有集合合并一样)。举个例子,我有3个集合:
1:活跃用户
[{_id:'', client_id:'',created:''}]2:非活跃用户
[{_id:'', visitor_id:'',created:''}]3:阻止的用户
[{_id:'', blocked_id:'',created:''}]我正在尝试做的是将所有3个集合组合成一个集合,按日期对它们进行排序,并确保我得到前10个结果,类似于:
[{_id:'', client_id:'',created:''},
{_id:'', blocked_id:'',created:''},
{_id:'', visitor_id:'',created:''}]我想出了这个代码:
collection('active).aggregate([
{
"$facet":{
"active":[
{"$match":{ "client_id": 5cfe83820c19ee3c50c8f323 }}
],
"not_active":[
{"$match":{"cust_id":"5cfe83820c19ee3c50c8f323" }}
],
"blocked":[
{"$match":{"blocked_id":"5cfe83820c19ee3c50c8f323" }}
]
}
},
{
"$skip":0
},
{
"$limit":10
},
{
"$sort":{
"created":-1
}
}
])但此代码返回空数组:
[ { active: [], not_active: [], blocked : []} ] 我做错了什么?谢谢
发布于 2019-06-11 09:03:48
最后,我想出了这样的代码来完成这项工作:
mongo.clients.aggregate([
{$limit:1},{$project:{_id:1}},{$project:{_id:0}},
{$lookup : {from:'active',as:'active',pipeline:[{$match:{}}]}},
{$lookup : {from:'not_active',as:'not_active',pipeline:[{$match:{}}]}},
{$lookup : {from:'blocked',as:'blocked',pipeline:[{$match:{}}]}},
{$project:{Union:{$concatArrays:['$active','$not_active','$blocked']}}},
{$unwind:"$Union"},
{$replaceRoot:{newRoot:"$Union"}},
{$skip:0},
{$limit:10},
{$sort:{'created': -1}}
]).then(x);这里有更详细的答案:enter link description here
https://stackoverflow.com/questions/56534161
复制相似问题