在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" } 我可以将哪些参数传递

如果我有mongodb数据库,是否可以:

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服务器。恐怕这是动态读取键和值的唯一方法。就是这样!非常感谢你!