mongodb聚合管道从多个嵌套文档属性创建值列表

问题描述 投票:1回答:1

我有两个集合,分别是db.items和db.data,格式如下:

// db.items document (configuration-level information such as name, settings, user, etc.)
{
    _id: #id,
    ...
}

// db.data document (data for the a configuration)
{
    ...,
    item: #id, // reference to _id of db.item doc
    grouping_1: [
        { name: "A", item: "ObjectId()" },
        { name: "B", item: "ObjectId()" }
    ],
    grouping_2: [
        { name: "C", item: "ObjectId()" },
        { name: "D", item: "ObjectId()" }
    ]
}

我似乎无法弄清楚是如何使用Aggregation Pipeline向db.item文档提供db.data“名称”属性的列表。

// db.items document desired result
{
    _id: #id,
    names: ["A", "B", "C", "D"],
    ...
}

db.data.find( { item: #id }, { _id: 0, "grouping_1.name": 1, "grouping_2.name": 1 } )之类的查询由于某种原因返回了像{ "grouping_1": [ { "name": "A" }, { "name": "B" } ], "grouping_2" : [ { "name": "C" }, { "name", "D" } ] }这样的集合>

我希望看到同时使用Shell和C#驱动程序(2.10)的实现;但是,如果您只能提供一个/太多的要求,我会很乐意接受任何一个。

编辑:我当时正在考虑将我的架构进行重组,使其看起来像这样/更容易使用。

{
    ...,
    grouping_1: {
        "A": "ObjectId()",
        "B": "ObjectId()"
    },
    grouping_2: {
        "C": "ObjectId()",
        "D": "ObjectId()"
    }
}

编辑2:对于具有我在第一次编辑中建议的模式的任何人,here's the solution

我有以下格式的两个集合db.items和db.data:// db.items文档(配置级信息,例如名称,设置,用户等){_id:#id,.. 。} // db.data ...

c# .net mongodb aggregation-framework mongo-shell
1个回答
1
投票

我相信此管道可以为您带来预期的结果:

© www.soinside.com 2019 - 2024. All rights reserved.