我发现了很多关于如何根据某个子文档标准查找文档的问题,但是是否有可能自己检索子文档,而不是检索包含它们的文档?
注:建议的副本不是重复的。该OP询问如何在集合中返回文档,每个文档都有匹配子文档的子集。我的问题是,如何只检索匹配的子文档。
像这样的收藏品:
{ name:"a" subs: [ { subname:"aa", value: 1 }, { subname:"ab", value: 2 } ] }
{ name:"b" subs: [ { subname:"ba", value: 2 }, { subname:"bb", value: 3 } ] }我想要执行一个查询,它只生成一个匹配查询的子文档,比如value === 2。
我试过这个:
myCollection.find().elemMatch("subs", { value:2 })这是接近的,但它只是发现(在示例数据中),这两个高级文档,因为它们的子元素匹配。我知道我可以从结果中选择子文档,但我希望查询能够完成这项工作,并生成以下内容.
{ subname:"ab", value: 2 }
{ subname:"ba", value: 2 }..。也就是只有匹配的子文档。有可能吗?提前谢谢。
发布于 2016-04-29 23:27:29
可以在查找的第二个参数中指定返回的内容。用你的数据试试这个:
db.myCollection.find( { subs: { $elemMatch: { "value" : 2 } } }, { "subs.$": 1 } );此外,这里还有一些很好的例子:
https://docs.mongodb.org/v3.0/reference/operator/projection/positional/#proj.
https://stackoverflow.com/questions/36948856
复制相似问题