MongoDB-如何筛选包含密钥的文档
在下面的mongo collection中,我如何筛选包含关键字cat1的文档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
{
"_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给了我这个结果。遗憾的是,希望这能有所帮助,上面提供的答案没有返回任何数据。