MongoDB根据其他集合中的项目过滤文档

时间:2019-12-22 09:21:17

标签: mongodb mongodb-query aggregation-framework

说,我有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个的文档?

1 个答案:

答案 0 :(得分:1)

您可以在$match之后添加$lookup,然后根据$size应用过滤条件:

db.Users.aggregate([
    {
        $lookup: {from: 'Orders', localField: 'id', foreignField: 'userId', as: 'orders'}
    },
    {
        $match: { $expr: { $lt: [ { $size: "$orders" }, 2 ] } }
    }
])

Mongo Playground