我有一个代表像这样结构的规则的文件
{
"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)."
非常感谢任何帮助。
答案 0 :(得分:1)
我想知道它是否必须对mongo版本做任何事情?我运行了你的第一个查询,结果得到了1个文件。