У меня есть две коллекции, 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()" }
]
}
Похоже, я не могу понять, как использовать Агрегационный конвейер для подачи в db.item выполните c список реквизитов db.data "name".
// 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" } ] }
Я бы предпочел видеть реализацию с использованием как оболочки, так и драйвера C# (2.10); однако, если вы можете предоставить только один / это слишком много, чтобы попросить, я с радостью приму любой из них.
Редактировать: я думал, что реструктуризация моей схемы, чтобы быть чем-то вроде этого, возможно, имеет больше смысла / с ним проще работать.
{
...,
grouping_1: {
"A": "ObjectId()",
"B": "ObjectId()"
},
grouping_2: {
"C": "ObjectId()",
"D": "ObjectId()"
}
}
Редактировать 2: Для тех, у кого есть схема, подобная той, которую я предложил в первом редактировании, вот решение !