MongoDB的。 限制只有“投影”(即filter)给定字段的子文档的方法?
因为没有办法在MongoDB中过滤子文档(参考: 如何用MongoDBselect子文档 )
在MongoDB中是否有另一种方法/方法来快速删除/过滤没有给定字段的字段,在下面的示例中没有subdocument
字段?
是通过处理mongodb 以外的结果并过滤掉所有空文档来做到这一点的唯一方法?
(想象一下,当你有一千个不同的模式的子目录时,我做了一个.find()并获得了1000个子目录,但是有900个是空的,我只想得到100,所以我不一定要处理在MongoDB之外的空白的。)
例如,您有一个collection named monday
的collection named monday
这个JSON:
{ document : [ { subdocument : "Hello World" }, { subdocument : "Hello Moon" }, { another_field: "Hello Sun" } ] }
你做这个查询db.monday.find({},{_id:0,"document.subdocument":1})
结果将是:
{ "document" : [ { "subdocument" : "Hello World" }, { "subdocument" : "Hello Moon" }, { } ] }
你看到another_field仍然返回,虽然是空的。
我相信在这种情况下返回空字段,因为document是一个数组,Mongodb不想改变任何元素的数组索引。
您可以使用聚合框架获取一系列子文档:
db.monday.aggregate( [ { $match: {'document.subdocument' : { $exists: 1 } } }, { $unwind: "$document" }, { $match: {'document.subdocument' : { $exists: 1 } } }, { $project: { subdocument: "$document.subdocument", _id: 0 } } ])
产量:
[ { "subdocument" : "Hello World" }, { "subdocument" : "Hello Moon" } ]
第一个$match
是没有必要的,它只是加快处理,如果有很多没有你正在寻找的子文档的文档。