【问题标题】:How to query all docouments having a specific array item in mongodb? [duplicate]如何在mongodb中查询所有具有特定数组项的文档? [复制]
【发布时间】:2018-05-04 08:30:42
【问题描述】:

我的文档如下所示:

{
  "_id":"5883d55ee4b05d652e466108",
  "result":"FAILURE",
  "failureCauses":[
    {
      "failureCause":
        {
          "$ref":"failureCauses", 
          "$id":"5883d33de4b05d652e4660d4", 
          "$db":""
        }, 
      "indications": [ 
        { 
          "pattern":"^FATAL: .*$", 
          "matchingFile":"log", 
          "matchingString":"FATAL: all hosts have already failed -- aborting"
        }
      ]
    },
    {
      "failureCause":
        {
          "$ref":"failureCauses",
          "$id":"5883d33de4b05d652e4660e3",
          "$db":""
        },
      "indications":[
        {
          "pattern":".*command not found.*",
          "matchingFile":"log",
          "matchingString":"bash: rsync: command not found"
        }
      ]
    }
  ]
}

如何获取具有特定 failureCauses 数组成员的所有文档? (我确实有 $id。)

注意,我已经尝试过以下查询,但没有返回任何结果:

{"failureCauses" : new ObjectId("myid") }
{"failureCauses" : { "$in" : [ ObjectId("myid") ]}}

【问题讨论】:

  • 从您的实施中丢失DBRef。它已经尽可能地被弃用了,而且现代 MongoDB 版本中的任何新功能肯定都不支持它。而是选择一个普通的ObjectId 并让您的应用程序架构从“客户端”识别“相关”集合。

标签: mongodb mongodb-query


【解决方案1】:

单一标准

您可以连接数组字段的名称,用点 (.) 和嵌套文档中的字段名称:

{
  "failureCauses.failureCause.$id": "5883d33de4b05d652e4660e3"
}

多个条件

如果您想查询满足多个条件的 Array 元素,请使用 $elemMatch 运算符对数组元素指定多个条件,以使至少一个数组元素满足所有指定条件:

{
  "failureCauses": {
    "$elemMatch": {
      "failureCause.$id": "5883d33de4b05d652e4660e3",
      "failureCause.$ref": "failureCauses"
    }
  }
}

【讨论】:

    【解决方案2】:

    json 数组中的元素可以使用点符号进行链接。 以下查询应该可以工作

    db.exp.find({"failureCauses.failureCause.$id":"5883d33de4b05d652e4660d4"})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2023-01-03
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2016-06-18
      相关资源
      最近更新 更多