当前位置: 首页 > 知识库问答 >
问题:

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

柯子琪
2023-03-14

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

{  _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的记录的文档的每个记录。在上面的示例中,应该只返回第二个文档。

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

我还查看了$nin运算符,但示例只显示数组包含基元值列表时的情况,而不是附加文档。当我尝试使用类似于下面的东西来实现这一点时,它查找的是确切的文档,而不仅仅是我想要的foo字段。

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

有没有用基本运算符来完成这件事?

共有1个答案

阎乐池
2023-03-14

使用$NIN可以工作,但语法错误。应该是:

db.collection.find({'docs.foo': {$nin: [1]}})
 类似资料:
  • 问题内容: 我有以下模型: 我正在寻找一个查询,该查询检索不属于某个特定组的所有人员(即,人员的组数组不包含指定组的ID)。 我在考虑这样的事情,但是我不确定它是正确的: 问题答案: 基本的尝试没什么错,但是这里唯一的澄清可能是普遍的误解,即您需要像 或 查询数组时这样的运算符。 另外,您真的需要在这里做一个基本的不等式匹配 : “数组”运算符不用于“数组目标”,而是用于提供条件的“列表”以方便的

  • 文档存在,但筛选时不匹配! 您好,我在我的项目中发现了一个新错误。我正在使用nodejs后端和mongodb数据库。我正在成功插入文档。但有一个特定领域(“proje\u ortagi”)让我感到困惑。因为当我将文档过滤为“\u id”字段时。所有文件都在响应。但当我将文档过滤为“proje\u ortagi”时,有些文档并不是响应。为什么会发生这种情况?我检查“proje\u ortagi”值的

  • 我有一个关于过滤特定字段不在值列表中的文档的问题。例如,文档只包含唯一且已索引的“_id”字段。现在我有一个“_id”列表,并想找出“_id”不在“_id”列表中的所有文档。 我可以通过使用$in运算符来实现,例如: 返回列表中ID的所有文档,然后与给定列表进行比较。这种方式的性能对于数千个文档来说还不够好。我想知道是否有更好的方法来做到这一点。例如,是否可以构造一个查询,只返回ID不在列表中的文

  • 你好,我有一个mongodb find()问题查询。我试图找到在同一个对象数组中有两个特定ID的所有文档。 示例文档结构: 如果我能帮你解决这两个问题中的任何一个,那就太好了!谢了。

  • 给定包含以下文档的集合: 我需要返回ip值为X的所有文档,但前提是X的关联时间戳是ips数组中的最高时间戳(因此,上面的示例文档不应与搜索“222222222”匹配,因为这不是具有最新时间戳的ip)。 这是我第一次在MongoDB中做任何超出相当基本的东西,所以我能得到的最接近的是: 科尔。聚合({$匹配:{“ips.ip”:X}}},{$组:{“\u id”:“$主机”,“max”:{$max:

  • 问题内容: 我的文档中具有以下结构: 我想更新 someField 和 someField2, 但仅更新数组中的一项,与 _arrayId 匹配的 项 (例如;并且仅针对此文档(例如)),而不更新其他项。 该 arrayIds 是不是唯一的,这就是为什么我需要它是针对特定文档的文档。如果要为数组中存在的每个文档更新该值,则可以使用,但这不是我想要的。 我试图在Java中完成此操作,但也可以使用命令