我正在尝试聚合,但找不到合适的管道来执行此操作。
所以,这是我的文档模型的一部分:
//company.js
{
"_id" : "5dg8aa8c435b1e2868c841f6",
"name" : "My Corp",
"externalId" : "d7f348c9-c69b-69c4-923c-91458c53dc22",
"professionals_customers" : [
{
"company" : "6f4d01eb3b948150c2aad9c0"
},
{
"company" : "5dg7aa8c366b1e2868c841f6",
"contact" : "5df8ab5c355b1e2999c841f7"
}
],
}
我尝试返回充满数据的专业客户字段,就像经典的填充一样。
公司字段来自公司集合,联系人由用户集合提供
所需的输出必须如下所示:
{
"professionals_customers" : [
{
"company": {
"_id": "6f4d01eb3b948150c2aad9c0",
"name": "Transtar",
"externalId": "d7f386c9-c79b-49c5-905c-90750c42dc22",
},
},
{
"company": {
"_id": "5dg7aa8c366b1e2868c841f6",
"name": "Aperture",
"externalId": "d7f386c9-c69b-49c4-905c-90750c53dc22",
},
"contact" : {
"_id": "5df8ab5c355b1e2999c841f7",
"firstname": "Caroline",
"lastname": "Glados",
"externalId": "d7f386c9-c69b-49c4-905c-90750c53dc22", //same externalId as above, the user belongs to the company
},
}
]
}
此时我已经尝试了多种解决方案,但无法达到我的目标。
let query = [{
$match : { _id : companyId }
},{
$lookup : {
from: 'companies',
localField : 'professionals_customers.company',
foreignField : '_id',
as : 'professionalsCustomers'
}
},{
$lookup : {
from: 'users',
localField : 'professionals_customers.contact',
foreignField : '_id',
as : 'contacts'
}
}]
此时,我已经有了两个包含所有所需信息的新数组,但我不知道如何将正确的联系人与正确的公司分组。另外,尝试填充数据(使用 $lookup)并保持初始结构可能比尝试通过共享 externalId 重新组合 professionalCustomers 和联系人更容易。
附加信息:
- 属于一个公司的用户具有相同的externalId。
-我不想使用经典的填充,之后我需要做一些其他操作