【问题标题】:Mongoose populate where猫鼬栖息在哪里
【发布时间】:2019-02-05 03:15:52
【问题描述】:

我有两个型号 - 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 模型。

但这似乎不起作用,我不确定为什么。

我尝试在填充函数中使用“匹配”,但这与我设置的其他查找条件不匹配(例如,我可以在填充函数中包含匹配,但如果我有一个 M1 模型正确的 M2 模型,但不符合其他标准,则被排除在外)。

我需要将所有填充过滤器与其他过滤器混合在一起,以便正确评估是否应将其包含在结果中。

【问题讨论】:

    标签: node.js mongodb mongoose where populate


    【解决方案1】:

    事实证明这是不可能的。更多信息https://github.com/Automattic/mongoose/issues/4043

    【讨论】:

      【解决方案2】:

      我认为没有任何方法可以做你想做的事情。您问题中的代码示例无法按预期工作,因为 M1 不知道 m2.title。 M1 只知道它的 M2 ObjectId 数组。

      您将必须查询所有符合您的 M1 条件的 M1 文档并填充 M2:

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

      然后过滤掉所有与你的m2标题匹配的结果:

      const finalResults = results.filter(({ m2 }) => m2.title === 'title-match')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-11
        • 2021-10-13
        • 1970-01-01
        • 2018-03-14
        • 2018-06-27
        • 2019-06-26
        • 2019-08-03
        • 1970-01-01
        相关资源
        最近更新 更多