【问题标题】:MongoDB $elemMatch on ALL embedded documents/subdocuments所有嵌入式文档/子文档上的 MongoDB $elemMatch
【发布时间】:2020-12-29 13:23:36
【问题描述】:

我有以下学生收藏:

[
  {
    nickname: 'Hafez',
    classes: [
      { name: 'Physics', score: 5 },
      { name: 'Math', score: 10 }
    ]
  },
  {
    nickname: 'Nada',
    classes: [
      { name: 'Physics', score: 8 },
      { name: 'Math', score: 9 }
    ]
  },
  {
    nickname: 'Sam',
    classes: [
      { name: 'Physics', score: 6 },
      { name: 'Math', score: 10 }
    ]
  }
]

我正在努力让学生在所有类中获得至少 7分。

以下过滤器为我提供了所有文档,因为它们在 some 类中都获得了 7 分。只有当他们在所有类中获得 7 分时,我才想找到他们。

Student.find({ 'classes.score': { $gte: 7 } }); // incorrectly finds all students.

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    我找到的解决方案是反转条件并执行$not

    下面的内容是:给我找一个在任何课程中得分不低于 7 的学生,相当于“给我找到所有在所有课程中得分高于 7 的学生。” p>

    Student.find({
      'classes.score': {
        $not: {
          $lt: 7
        }
      }
    }); // correctly logs only `Nada`
    

    诚然,它的可读性很难掌握,你经常需要向你的同行解释为什么你要这样做,但我找不到任何其他方法来实现我的目标我正在努力实现。

    这是一个可以玩这个的 mongo 游乐场:https://mongoplayground.net/p/4hI3j7dliYw

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-22
      • 2013-09-18
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多