mongodb 对于每个文档,通过引用检索其字段 + 在另一个集合中其 ID 的计数
mongodb for each document retrieve its fields + count of its id in another collection by reference
假设我有一个用户集合,其中单个文档具有这样的字段
{
"_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39",
"surname" : "Smith",
"forename" : "John"
}
假设我有一个作业集合,其中一个文档有一些常规字段,但也有像这样的用户 ID 的数据库引用
{
"_id" : "f4bdda3e-0e8d-4e8d-b070-7d01421f5a51",
"description" : "do something",
"manager" : {
"$ref" : "users",
"$id" : "4775222e-8e4f-4f84-8dba-b097291bbd39"
}
}
是否可以在单个查询中检索用户列表以及每个用户属于他的作业计数,因此最终输出将是一个实体列表,其中单个实体看起来像
{
"_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39",
"surname" : "Smith",
"forename" : "John",
"jobsCount":3
}
你可以用一个简单的 $lookup 阶段来做到这一点:
db.users.aggregate([
{
"$lookup": {
"from": "jobs",
"localField": "_id",
"foreignField": "manager.$id",
"as": "jobsCount"
}
},
{
"$addFields": {
"jobsCount": {
$size: "$jobsCount"
}
}
}
])
假设我有一个用户集合,其中单个文档具有这样的字段
{
"_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39",
"surname" : "Smith",
"forename" : "John"
}
假设我有一个作业集合,其中一个文档有一些常规字段,但也有像这样的用户 ID 的数据库引用
{
"_id" : "f4bdda3e-0e8d-4e8d-b070-7d01421f5a51",
"description" : "do something",
"manager" : {
"$ref" : "users",
"$id" : "4775222e-8e4f-4f84-8dba-b097291bbd39"
}
}
是否可以在单个查询中检索用户列表以及每个用户属于他的作业计数,因此最终输出将是一个实体列表,其中单个实体看起来像
{
"_id" : "4775222e-8e4f-4f84-8dba-b097291bbd39",
"surname" : "Smith",
"forename" : "John",
"jobsCount":3
}
你可以用一个简单的 $lookup 阶段来做到这一点:
db.users.aggregate([
{
"$lookup": {
"from": "jobs",
"localField": "_id",
"foreignField": "manager.$id",
"as": "jobsCount"
}
},
{
"$addFields": {
"jobsCount": {
$size: "$jobsCount"
}
}
}
])