mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档

标签 mongodb

我正在尝试查找不包含至少一个具有特定字段值的文档的所有文档。例如这里是一个示例集合:

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

我想在 docs block 中找到不包含至少一个 foo = 1 记录的文档的每条记录。在上面的示例中,应该只返回第二个文档。

我尝试了以下方法,但它只告诉我是否有任何不匹配的内容(返回文档 1。

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

更新:上面的查询确实有效。正如很多次发生的那样,我的数据是错误的,而不是我的代码。

我也看过 $nin operator但是这些示例仅显示了数组何时包含原始值列表,而不是附加文档。当我尝试使用以下内容执行此操作时,它会查找 EXACT 文档,而不仅仅是我想要的 foo 字段。

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

有没有办法用基本操作符来完成这个?

最佳答案

使用 $nin会工作,但你有语法错误。应该是:

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

关于mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16221599/

相关文章:

python - 从 MongoDB 获取嵌套数据到 Pandas 数据框

node.js - 与 MongoDB 匹配值范围

javascript - 使用 mongoDB 数据初始化 Bootstrap colorpicker

node.js - Nodejs 中的 Mongodb 与 Postgres

node.js - 通过 Node.js 驱动程序运行任意 MongoDB 脚本

node.js - 我一直收到 "Error: Arguments must be aggregate pipeline operators"但我使用 mongo shell 检查了语句

node.js - postman 发布请求无法读取未定义的属性

MongoDB嵌套对象字段深度限制

node.js - Mongoose 总是返回空数组?

javascript - 使用 Mongo 的内部时钟设置 Unix 时间戳