gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:55:49 24 4
gpt4 key购买 nike

我正在查看关于 $ 的 MongoDB 文档。和 $elemMatch
预测。我想弄清楚如何只返回 a 的一个子集
投影数组的字段,但我似乎无法弄清楚。

相关文章:

  • 我不是要执行 $slice来自 mongodb aggregation framework - Fetch first document's field of the nested array .
  • 我也不想将 Return only array value in 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})

    我希望它只返回 name在子文件下
    数组 where key1 .例如。,

    {
    "_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})

    有没有办法只返回 array.$ 的字段子集
    而不是整个子文档?

    最佳答案

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

    db.test.aggregate([{$unwind:"$array"},
    {$match:{"array.key":1}},
    {$project:{"array.name":1, extra:1}}])

    关于mongodb - 仅返回投影数组子文档中的特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23254363/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com