Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-如何筛选包含密钥的文档_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB-如何筛选包含密钥的文档

MongoDB-如何筛选包含密钥的文档,mongodb,mongodb-query,Mongodb,Mongodb Query,在下面的mongo collection中,我如何筛选包含关键字cat1的文档 { "_id" : ObjectId("xxxxxxxxxx"), "key1_cat1": "val1" } { "_id" : ObjectId("xxxxxxxxxx"), "key1_cat2": "val2" } { "_id" : ObjectId("xxxxxxxxxx"), "key2_cat1": "val3" } { "_id" : Obje

在下面的mongo collection中,我如何筛选包含关键字cat1的文档

{
    "_id" : ObjectId("xxxxxxxxxx"),
    "key1_cat1": "val1"
}
{
    "_id" : ObjectId("xxxxxxxxxx"),
    "key1_cat2": "val2"
}
{
    "_id" : ObjectId("xxxxxxxxxx"),
    "key2_cat1": "val3"
}
{
    "_id" : ObjectId("xxxxxxxxxx"),
    "key2_cat2": "val4"
}
我正在寻找类似于
collection.find({“$key\u contains”:“cat1”})
的东西,它应该过滤doc1和doc2并输出为

{
    "_id" : ObjectId("xxxxxxxxxx"),
    "key1_cat1": "val1"
}
{
    "_id" : ObjectId("xxxxxxxxxx"),
    "key2_cat1": "val3"
}

我认为这不能直接在Mongo完成。但是我们可以通过使用
objectToArray

collection.aggregate([{
    '$project': {
        modifiedFormat: {
            $objectToArray: '$$ROOT'  // converts your object to array format [{k:, v:}, {k:, v:}]
        }
    }
}, {
    $match: {
        'modifiedFormat.k': {
            $regex: 'cat1' // your search on key(k)
        }
    }
}, {
    $project: {
        oldFormat: {
            $arrayToObject: '$modifiedFormat' // Making array to object again
        }
    }
}, {
    $replaceRoot: {
        newRoot: '$oldFormat' // replaceRoot to bring in the old format
    }
}])

上面的查询中有一个断言失败<代码>“errmsg”:“'newRoot'表达式必须对对象求值,但结果值为:null。结果值的类型为:'null'。输入文档:{u id:5b1f537f519b461d78e2f284,oldFormat:null}”,我用上述相同的集合尝试了它。@user2649233有一个输入错误。现在已经修好了谢谢,已经修好了。但我有一种情况,找到的钥匙在一个物体内部。i、 e
{“main_key”:“key1_cat1”:“val1”}
现在我必须根据子键进行过滤-如何修改上述内容以达到此要求?类似于
键的内容包含主键。cat1
应该过滤所有相关的docsA quick stackoverflow search给了我这个结果。遗憾的是,希望这能有所帮助,上面提供的答案没有返回任何数据。