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"
}
}
}
])