如何查询mongodb中具有特定数组项的所有docouments?

时间:2018-05-03 16:59:54

标签: mongodb mongodb-query

我的文件看起来像这样:

{
  "_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"
        }
      ]
    }
  ]
}

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

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

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

2 个答案:

答案 0 :(得分:2)

单一标准

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

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

多个标准

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

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

答案 1 :(得分:1)

json数组中的元素可以使用点表示法链接。 以下查询应该可以正常工作

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