在嵌套数组中按字段查询可能不存在的文档

时间:2016-06-10 20:20:45

标签: mongodb mongodb-query

我有一个代表像这样结构的规则的文件

{
    "id" : "34534",
    "name" : "rule1",
    "parameters" : {
        "nodes" : [
            {
                "type" : "x",
                "properties" : {
                    "dataSets" : [
                        {
                            "dataSetKey" : "key"
                        },
                        {
                            "dataSetKey" : "key2"
                        }
                    ],
                    "resource" : {
                        "id" : "4353454"
                    }
                }
            },
            {
                "type" : "y",
                "params" : {}        
            }
        ]
    }
}

我想编写一个查询,如果它有一个类型为x的节点,则返回整个文档,并且在该节点内,它有一个dataSetKey为" key"的dataSet。除非节点是x类型,否则它将不具有包含dataSets数组的属性字段。我已经尝试过此查询,但它返回0个文档

db.getCollection('Rules').find({
    "parameters.nodes": {
        $elemMatch: {
            "type": "x",
            "properties.dataSets": {
                $elemMatch: {
                    "dataSetKey": "key"
                }
            }
        }
    }
})

我也试过这个

db.getCollection('Rules').find({"parameters.nodes.properties.datasets": {$exists: true}},{
    "parameters.nodes": {
        $elemMatch: {
            "type": "x",
            "properties.dataSets": {
                $elemMatch: {
                    "dataSetKey": "key"
                }
            }
        }
    }
})

但它返回以下错误。

"$err" : "Cannot use $elemMatch projection on a nested field (currently unsupported)."

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我想知道它是否必须对mongo版本做任何事情?我运行了你的第一个查询,结果得到了1个文件。