问题描述
{
"_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39","surname" : "Smith","forename" : "John"
}
并说我有工作集合,其中文档具有一些常规字段,但也有对用户ID的db ref
{
"_id" : "f4bdda3e-0e8d-4e8d-b070-7d01421f5a51","description" : "do something","manager" : {
"$ref" : "users","$id" : "4775222e-8e4f-4f84-8dba-b097291bbd39"
}
}
既可以检索用户列表,又可以为每个用户在单个查询中获取属于他的作业数,因此最终输出将是一个实体列表,其中单个实体看起来像
{
"_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39","forename" : "John","jobsCount":3
}
解决方法
您可以通过简单的$lookup阶段进行此操作:
db.users.aggregate([
{
"$lookup": {
"from": "jobs","localField": "_id","foreignField": "manager.$id","as": "jobsCount"
}
},{
"$addFields": {
"jobsCount": {
$size: "$jobsCount"
}
}
}
])