我有一个名为outsideServices
的模型:
name: String,
salary: Number,
services: [
{
category: {
ref: 'ServiceCategories',
type: Schema.Types.ObjectId
},
types: [
{
ref: 'ServiceType',
type: Schema.Types.ObjectId
}
]
}
]
我有一个名为incidents
的模型:
outsideServices: {
ref: 'OutsideService',
type: Schema.Types.ObjectId
}
当从 API 请求 incidents
时,响应如下:
[
{
category: '5cf655135a1b72106777c238',
types: ['5cf655a85a1b72106777c239']
},
{
category: '5cf656525a1b72106777c23b',
types: ['5cf656835a1b72106777c23c']
}
];
如何查找 categories
和 types
的引用并保持响应中的结构?
到目前为止,我尝试了以下方法,但无法获得所需的结果:
aggregate.lookup({
from: 'outsideservices',
let: { serviceId: '$outsideServices' },
pipeline: [
{ $match: { $expr: { $eq: ['$_id', '$$serviceId'] } } },
{
$lookup: {
from: 'servicecategories',
let: { services: '$services.category' },
pipeline: [{ $match: { $expr: { $in: ['$_id', '$$services'] } } }],
as: 'category'
}
},
{
$lookup: {
from: 'servicetypes',
let: { services: '$services.types' },
pipeline: [
{ $match: { $expr: { $in: ['$_id', '$$services'] } } }
],
as: 'types'
}
}
],
as: 'outsideService'
});
期望的结果类似于上面的响应,但使用填充文档而不是
ObjectId
。MongoDB 版本为
4.0.10
。
{_id: null, services: [...]}
,我该怎么做?我尝试了以下代码:{ $group: { _id: null, services: { $push: '$services' }, doc: { $first: '$$ROOT' } } }, { $replaceRoot: { newRoot: '$doc' } }
但这将导致只返回一个服务(因为$first
的原因)。 - Stathis Ntonas{$addFields:{“doc.services”:”$services”}}
。这就是您所要求的吗? - s7vr$first
将所有内容进行$group
,然后在下一阶段中使用$project
,但我还需要查找五个以上的“refs”,并使用相同的代码进行分组,这需要很多代码,它们都是大对象,我希望能有更简单的方法。 - Stathis Ntonas