我有两种型号 - M1和M2。
在M1中,我有一组M2对象。
我试图创建一个可以获取一堆M1模型的查询,但只有当M2中的某个字段符合我设置的标准时才会这样。
我已正确设置模型(因此M1有一个针对M2的Schema.Types.ObjectId数组)。
理想情况下,我想做这样的事情:
var result = await M1.find({
'm2.title': 'title-match',
// ...
// Plus other criteria
})
.populate('m2')
.exec();
所以我想要的是所有具有M2型号的M1型号都具有标题'设置为' title-match'。
但这似乎不起作用,我不知道为什么。
我尝试过使用'匹配'在填充函数中,但这并不适合我设置的其他查找条件(例如,我可以在填充函数中包含匹配但是如果我有一个M1模型具有正确的M2模型但它没有&#39 ; t符合其他标准,然后被遗漏)。
我需要将所有填充过滤与其他过滤器混合在一起,以便正确评估是否应将其包含在结果中。
答案 0 :(得分:0)
事实证明,这是不可能的。有关此https://github.com/Automattic/mongoose/issues/4043
的更多信息答案 1 :(得分:0)
我认为没有任何方法可以做您想做的事情。您的问题中的代码示例未按预期工作,因为M1不了解const results = await M1.find({
// ... m1 criteria
}).populate('m2').exec()
。 M1仅知道其M2 ObjectId数组。
您将需要查询所有符合M1标准的M1文档并填充M2:
const finalResults = results.filter(({ m2 }) => m2.title === 'title-match')
然后过滤掉所有与您的m2标题匹配的结果:
{{1}}