Mongodb一对多获得多个孩子

Mongodb一对多获得多个孩子,mongodb,mongodb-query,Mongodb,Mongodb Query,我有两个收藏: 用户:[{ _id:'xxx', 姓名:“xxx”, }, ... ] 职位:[{ _id:'xxx', 用户ID:'xxx', }, ... ] 因此,一个用户可以有多个帖子。我想获得每个用户拥有的帖子数量。如果用户没有任何帖子,则应加载0 因此,结果将是: [{ _id:'xxx', 姓名:“xxx”, 帖子数量:“xxx” }, ... ] 下面是我写的问题: $lookup:{ 来自:"Posts",, 让我们:{ 用户id:“$\u id”, }, 管道:[{ $m

我有两个收藏:

用户:[{
_id:'xxx',
姓名:“xxx”,
},
...
]
职位:[{
_id:'xxx',
用户ID:'xxx',
},
...
]
因此,一个用户可以有多个帖子。我想获得每个用户拥有的帖子数量。如果用户没有任何帖子,则应加载
0

因此,结果将是:

[{
_id:'xxx',
姓名:“xxx”,
帖子数量:“xxx”
},
...
]
下面是我写的问题:

$lookup:{
来自:"Posts",,
让我们:{
用户id:“$\u id”,
},
管道:[{
$match:{
$expr:{
$eq:[“$userId”,“$$userId”]
}
}
}, {
$count:“posts”
}, {
$项目:{
职位:{
$cond:[{
$ifNull:['$posts',true]
},
“$posts”,
0
]},
}
}],
as:‘帖子’
}

如果用户没有任何帖子,它不会给我0。查询中出现了什么问题?

您可以尝试简单的方法

  • 使用不带管道的
    $lookup
  • $addFields
    使用
    $size

db.Users.aggregate([
  {
    $lookup: {
      from: "Posts",
      localField: "_id",
      foreignField: "userId",
      as: "numberOfPosts"
    }
  },
  {
    $addFields: {
      numberOfPosts: {
        $size: "$numberOfPosts"
      }
    }
  }
])