说,我有2个收藏夹。用户和订单如下: 用户
{
id: '01',
name: 'john'
},
{
id: '02',
name: 'donald'
}
订单
{
id: '01',
userId: '01'
},
{
id: '02',
userId: '02'
},
{
id: '03',
userId: '01'
}
我想匹配具有1个以上订单的所有用户。我稍后在管道中使用localField,foreignField。使用的示例代码:
db.Users.aggregate([
{
$match: {
activated: true
}
},
{
$sort: {
Date: -1
}
}
])
我想基于$ lookup数据过滤 Users 集合的某些文档。例如$lookup: {from: 'Orders', localField: 'id', foreignField: 'userId', as: 'orders'}
。如何从聚合中排除订单少于2个的文档?
答案 0 :(得分:1)
您可以在$match
之后添加$lookup
,然后根据$size应用过滤条件:
db.Users.aggregate([
{
$lookup: {from: 'Orders', localField: 'id', foreignField: 'userId', as: 'orders'}
},
{
$match: { $expr: { $lt: [ { $size: "$orders" }, 2 ] } }
}
])