我正在try 查找所有不包含至少一个具有特定字段值的文档的文档.例如,以下是一个样本集合:

{  _id : 1,
  docs : [
        { foo : 1,
          bar : 2},
        { foo : 3,
          bar : 3}
         ]
},
{  _id : 2,
  docs : [
        { foo : 2,
          bar : 2},
        { foo : 3,
          bar : 3}
         ]
}

我想找到docs块中没有文档的每个记录,这些文档不包含至少一条foo=1的记录.在上面的示例中,只应返回第二个文档.

我try 了以下内容,但它只告诉我是否有不匹配的内容(返回文档1).

db.collection.find({"docs": { $not: {$elemMatch: {foo: 1 } } } })

UPDATE:.上面的查询确实有效.很多时候,我的数据是错误的,而不是我的代码.

我也看了$nin operator,但示例仅显示数组包含原语值列表时的情况,而不是其他文档.当我try 使用下面这样的内容时,它会查找确切的文档,而不仅仅是我想要的foo字段.

db.collection.find({"docs": { $nin: {'foo':1 } } })

到底有没有办法用基本运算符来实现这一点?

推荐答案

使用$nin可以,但语法错误.应该是:

db.collection.find({'docs.foo': {$nin: [1]}})

Mongodb相关问答推荐

MongoDB 4.4如何使用未知密钥更新dict

MongoDB(Mongoose)条件判断没有像我预期的那样工作

从 MongoDB 中的聚合结果中获取不同的值

@DynamicPropertySource 未被调用(Kotlin、Spring Boot 和 TestContainers)

在我的查询中使用 populate() 时的 MongoDB createIndex()

TypeError:Cannot read property '_id' of undefined

使用 mongodb 时是否需要规范化数据库?

更新 mongodb 文档中的特定字段

无法提取地理键,经度/纬度超出范围

Mocking/stubbing mongoose模型保存方法

Mongoose 与 mongodb 如何返回刚刚保存的对象?

MongoDB 1.6.5:如何重命名集合中的字段

MongoDB - 清除嵌套数组中的元素

MongoDB 存储 ObjectId 的数组

mongo - 如何查询嵌套的 json

为什么我新创建的 mongodb 本地数据库增长到 24GB?

如何在 MongoDB 的 $match 中使用聚合运算符(例如 $year 或 $dayOfMonth)?

使用 Node.js 将许多记录插入 Mongodb 的正确方法

我在更新中对 $set 和 $inc 做错了什么

如何在 Mongoid 中引用嵌入的文档?