我的文件看起来像这样:
{
"_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") ]}}
答案 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"})