在mongodb数据库中,如何查找()并筛选出任何子文档?
如果我有mongodb数据库,是否可以:在mongodb数据库中,如何查找()并筛选出任何子文档?,mongodb,nosql,mongodb-query,Mongodb,Nosql,Mongodb Query,如果我有mongodb数据库,是否可以: db.mydb.find(…) 这样,结果将过滤掉可能存在的任何子文档,而不事先知道它们是什么 例如,如果我有: { "_id" : ObjectId("..."), "name" : "george", "address" : { "street" : "101 example way", "city" : "tutorial", "state" : "CA" }, "other thing" : "thing value" } 我可以将哪些参数传递
db.mydb.find(…)
这样,结果将过滤掉可能存在的任何子文档,而不事先知道它们是什么
例如,如果我有:
{ "_id" : ObjectId("..."), "name" : "george", "address" : { "street" : "101 example way", "city" : "tutorial", "state" : "CA" }, "other thing" : "thing value" }
我可以将哪些参数传递给find(),从而得到:
{ "_id" : ObjectId("..."), "name" : "george", "other thing" : "thing value" }
无需具体说明:
db.mydbl.find( {}, { "address" : 0} )
是否存在抑制所有子文档的方法?如果要在不指定任何现有键的情况下动态删除任何嵌套对象,可以使用聚合框架:
db.col.aggregate([
{
$project: {
keysAndValues: {
$objectToArray: "$$ROOT"
}
}
},
{
$addFields: {
keysAndValues: {
$filter: {
input: "$keysAndValues",
as: "kvPair",
cond: { $ne: [ { $type: "$$kvPair.v" }, "object" ] }
}
}
}
},
{
$replaceRoot: {
newRoot: { $arrayToObject: "$keysAndValues" }
}
}
])
基本上,这个想法非常简单:我们希望使用()将文档转换为键值对列表。然后我们可以过滤掉那些键值对,其中值为
“object”
。在最后一步中,我们可以使用将阵列转换回一个对象,谢谢!我正在查看objectToArray操作符,但似乎无法使其工作。我正在使用objectToArray文档页面上的示例,但是直接复制和粘贴清单示例只是为了测试它,我得到了“errmsg:“异常:无效运算符'$objectToArray'”
关于可能导致这种情况的原因有什么想法吗?它是在V3.6中引入的,因此我认为如果可能,您需要升级db服务器。恐怕这是动态读取键和值的唯一方法。就是这样!非常感谢你!