我是MongoDB的新手,所以我可能有一些术语错误,但我不认为我见过任何人问过这样的问题:

如果我有一个形状类似以下内容的文档集合:

{
_id: ObjectID('656ce741b78f8f5fea229c4f'),
year: 2,
name: "Student Name",
grades: [
  {
    date: ISODate('2014-08-16T00:00:00.000Z'),
    grade: 'A',
    score: 97
  },
  {
    date: ISODate('2014-03-19T00:00:00.000Z'),
    grade: 'A',
    score: 91
  },
  {
    date: ISODate('2015-08-16T00:00:00.000Z'),
    grade: 'B',
    score: 82
  }
]
}

我怎么才能找到所有的全优学生呢?也就是说,所有的学生使得成绩数组只包含grades.grade = "A".我可以提供实际的文档 struct ,但是这个虚构的学生文档集合的逻辑应该是相同的.

我try 过使用$all,但我认为这需要一个值数组,而不是一个对象array.我也try 了$elemMatch$ne: B$ne: C,但这似乎返回至少一个元素是A的任何内容,而不是要求所有元素都是A.

推荐答案

下面的查询应该只匹配级别数组中所有元素的值都不等于B或C的文档:

{"grades.grade":{$nin: ["C","B"]}}

Mongodb相关问答推荐

通过mongoDB中的查找从管道中删除被阻止的用户

在服务器上部署后端时判断??=默认判断

如何在MongoDB中搜索有序子集的方法?

如何为具有相同名称的嵌套字段创建文本索引

将 MongoDB 转移到另一台服务器?

MongoDb c# driver LINQ vs Native 查询

Meteor 方法与deny/allow 规则

db.createCollection 不是函数

无法连接到mongolab主机

mongodb-nodejs-driver,DeprecationWarning:collection.count 已弃用

带有 jQ​​uery Ajax/JSON 前端的 MongoDB 或 CouchDB 中间件

有没有办法自动更新 MongoDB 中的两个集合?

如何使用 MongoDB C# 驱动程序有条件地组合过滤器?

获取 mongodb 中所有唯一标签的列表

Mongoose Select 要从 findOneAndUpdate 返回的字段

Meteor订阅不更新集合的排序顺序

如何在 $match 内的 mongodb 聚合查询中使用 $regex

试图从 mongoose 获取Collection 列表

使用 Mongoose ORM 的杀手锏是什么?

在mongoose中创建和查找地理位置