使用嵌套json在mongodb中过滤查询

时间:2017-02-03 05:38:16

标签: json mongodb filter

我有一个mongoDB集合,我需要使用ti过滤器来让学生“状态”为“CA”。集合看起来像这样

{
"_id" : ObjectId("112233"),
"John" : {
    "age" : "20",
    "gender" : "male",
    "result" : "pass",
    "state" : "CA"
},
"Sam" : {
    "age" : "24",
    "gender" : "male",
    "result" : "pass",
    "state" : "NV"
},
"Emily" : {
    "age" : "21",
    "gender" : "Female",
    "result" : "pass",
    "state" : "CA"
},
"Paul" : {
    "age" : "22",
    "gender" : "Male",
    "result" : "pass",
    "state" : "CA"
}

}

我尝试了$ filter但是无法使其工作,因为它会抛出此错误“太多的递归”

2 个答案:

答案 0 :(得分:2)

您可以使用$redact

$redact一次浏览一个文档级别,并递归查找state字段,并根据条件执行$$DESCEND$$PRUNE

唯一需要注意的是在第一个文档级别使用$ifNull但没有$state字段,我们指定的值为CA,以便您可以{{ 1}}到嵌入式文档级别以便进一步处理。

$$DESCEND

答案 1 :(得分:0)

我不认为你现有的架构很有可能。 我认为你应该做的是有一个名为学生的集合,并使用密钥名称在文档中移动名称。

所以看起来像这样:

std::function

This question也可能有用。