如何在mongoDb中过滤子数组并投影匹配文档的多个匹配值

如何在mongoDb中过滤子数组并投影匹配文档的多个匹配值,mongodb,Mongodb,我的结构如下: { _id: ObjectId("doc1"), SubArrayDocs: [ { _id: ObjectId("subDoc1"), name: "name1" }, { _id: ObjectId("subDoc2"), name: "name2" }, { _id: ObjectId("subDoc3"),

我的结构如下:

{
_id: ObjectId("doc1"),
    SubArrayDocs: [
        {
        _id: ObjectId("subDoc1"),
        name: "name1"
        },
        {
        _id: ObjectId("subDoc2"),
        name: "name2"
        },
        {
        _id: ObjectId("subDoc3"),
        name: "name3"
        }
    ]
},
{
    _id: ObjectId("doc2"),
    ....
}
我希望匹配doc1,并在投影时按_id返回经过过滤的子数组文档,以便只得到subDoc1和subDoc2

我已经尝试了一些方法,我可以得到所有的子阵列文档,或者只得到第一个匹配$in操作符的子阵列文档

是否有一种方法可以过滤匹配文档上的子数组文档,以便在不使用聚合框架的情况下返回多个子数组文档

给定orgId的预期结果:doc1和 子数组文档:子文档1、子文档2应为:

{
    _id: ObjectId("doc1"),
        SubArrayDocs: [
            {
            _id: ObjectId("subDoc1"),
            name: "name1"
            },
            {
            _id: ObjectId("subDoc2"),
            name: "name2"
            }
        ]
    }
因此,基本上,获取文档,但使用其子数组的过滤内容。
我已经用$in$elemMatch、投影和位置参数尝试了我所能做的一切。

你能告诉我们你尝试过的几件事的代码以及预期的结果吗?首先,你的ObjectId是invalidNo。只能将数组的内容限制为第一个匹配元素。您需要更改文档结构或使用聚合框架。@Michael感谢您的注意。。。但我是故意这么做的……因为在这种情况下,生成或模拟24个字符长的ObjectId毫无意义,IMHO@wdberkeley谢谢是或不是,这就是我想要的。。。万一我错过了什么