当前位置: 首页 > 知识库问答 >
问题:

仅返回投影数组子文档中的特定字段

邓阳伯
2023-03-14

我正在查看MongoDB在$$elemMatch投影上的留档。我试图弄清楚如何只返回投影数组字段的子集,但我似乎无法弄清楚。

相关帖子:

>

  • 我没有试图从mongob聚合框架中执行$片-获取嵌套数组的第一个文档字段。

    我也没有尝试从mongo projection中的仅返回数组值展平子文档,因为我仍然需要顶部文档中的一些字段。

    假设我在test集合中有以下文档:

    {
        "_id": "A",
        "array": [
            {"key": 1, "name": "foo", "data": {}},
            {"key": 2, "name": "bar", "data": {}}
        ],
        "extra": {}
    },
    {
        "_id": "B",
        "array": [
            {"key": 3, "name": "spam", "data": {}},
            {"key": 4, "name": "eggs", "data": {}}
        ],
        "extra": {}
    }
    

    我想要执行的查询是:

    db.test.findOne({"array.key": 1}, {"array.$.name": 1, "extra": 1})
    

    我希望它只返回数组中key1的子文档下的name。例如。,

    {
        "_id": "A",
        "array": [
            {"name": "foo"}
        ],
        "extra": {}
    }
    

    但如果我执行该查询,我会得到以下结果:

    {
        "_id": "A",
        "array": [
            {"key": 1, "name": "foo", "data": {}}
        ],
        "extra": {}
    }
    

    这与执行查询相同:

    db.test.findOne({"array.key": 1}, {"array.$": 1, "extra": 1})
    

    我还尝试了以下方法,结果也是一样的:

    db.test.findOne({"array.key": 1}, {"array.$": 1, "array.name": 1, "extra": 1})
    

    是否有方法仅返回数组的字段子集$ 而不是整个子文档?


  • 共有1个答案

    贺季同
    2023-03-14

    您是否专门尝试在不使用聚合的情况下执行此操作?

    db.test.aggregate([{$unwind:"$array"},
                       {$match:{"array.key":1}},
                       {$project:{"array.name":1, extra:1}}])
    
     类似资料:
    • 任何人都可以帮助我查询mongo以释放数组,我使用的是mongdb本机驱动程序我的收集文档如下,也请忽略我的objectId它只是示例 而我的预期产出是 我只想解开我的数组,在一个查询中的爱好描述之间添加一个逗号,谢谢你的帮助

    • 主要集合是零售商,其中包含用于商店的数组。每个商店都包含一系列优惠(您可以在此商店购买)。这提供了具有数组大小的数组。(见下面的例子) 现在我试图找到所有的优惠,这是在大小。 我尝试了这个查询: 我期待这样的输出: 但是,我的查询的输出还包含与XS、X和M不匹配的offer。 如何强制MongoDB只返回符合我查询的报价? 问候和感谢。

    • 我正在尝试使用Mongo聚合框架来找出我文档中的数组和另一个用户定义的数组之间的交集。我没有得到正确的结果,我的猜测是因为我在数组中有数组。 这是我的数据集。 我的文档: 我的查询: 结果: 我不希望第一个公共字段为空。有人能告诉我我做错了什么吗?或者我能采取的任何变通办法。 我正在使用MongoDB 3.0.8。我知道Mongob 3.2可以提供一些功能来满足我的需求,但3.2升级不会很快在我们

    • 因为在MongoDB中没有办法过滤子文档(参考:如何使用MongoDB选择子文档) MongoDB中是否有其他方法/方法可以快速删除/过滤没有给定字段、没有下例中的字段的字段? 是唯一的方法来做到这一点,通过处理mongoDB外部的结果,并过滤掉所有空文档? (想象一个情况,当你有一千个具有不同模式的subdocs。我做了一个. search(),得到了1000个子文档,但是900是空的。我只是想

    • 我有已导入收藏的. json-file。 我想做一些地图缩减,以显示所有用户的评论总数及其平均值。 我试过: 我不知道为什么它会显示\u id“:null。我想这个.ratings.userId是错误的。但是这个.ratings[userId]也不起作用。 我预计会出现以下情况: 你能帮忙吗?

    • 问题内容: 我有这些猫鼬模式: 如何返回所有带有最新消息子文档(限制1)的线程? 目前,我正在服务器端过滤结果,但出于性能考虑,我想在MongoDb中移动此操作。 问题答案: 您可以使用,,并使用类似以下方式进行操作: