猫鼬填充其中,

问题描述 投票:1回答:2

我有两个型号 - M1和M2。

在M1我M2对象的数组。

我试图创建一个查询,会抢了一堆M1车型,但只有在M2某个领域我设定的标准相匹配。

我正确地已经设置的模型(M1所以有Schema.Types.ObjectId对M2的数组)。

理想的情况是我愿意做这样的事情:

    var result = await M1.find({
        'm2.title': 'title-match',
        // ...
        // Plus other criteria
    })
    .populate('m2')
    .exec();

所以,我想回去是所有具有具有“标题”设置为“标题匹配”的模式M2货币供应量M1的机型。

但是,这似乎并没有工作,我不知道为什么。

我在填入功能使用“匹配”尝试,但这个没有发挥好与其他查找条件我设置(因此,例如,我可以包括在填入功能匹配,但如果我有了正确的关系M2的M1模型模型,但它不符合其他标准则漏掉)。

我需要我的所有填入过滤,混合与其他过滤器,以便它正确评估是否应该包括它的结果还是不行。

node.js mongodb mongoose where populate
2个回答
0
投票

原来,这是不可能的事情。在这个https://github.com/Automattic/mongoose/issues/4043更多信息


0
投票

我不认为有任何的方式做你想要做的事。在你的问题中的代码示例,你期待,因为M1没有m2.title的知识是行不通的。 M1只知道它的阵列的M2的ObjectId的。

你将不得不查询符合您的M1标准,并填充M2,所有M1文件:

const results = await M1.find({
  // ... m1 criteria
}).populate('m2').exec()

然后,过滤掉所有事后符合您平方米的标题,结果:

const finalResults = results.filter(({ m2 }) => m2.title === 'title-match')
© www.soinside.com 2019 - 2024. All rights reserved.