У меня есть моя коллекция структур
{
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
allowed: ['a', 'b']
}
В этой коллекции разрешенный массив хранит имя поля для извлечения. Он устанавливается предпочтением пользователя, которое он хочет получить, и может изменять эти выбранные поля и обновляется в разрешенном массиве.
Я хочу получить с использованием агрегата MongoDB и спроектировать каким-либо образом, что разрешенный массив будет использоваться без вручную перечисляя все поля в $ project
{ $project: { a: 1, b: 1 } }
У меня есть одно решение, такое как использование приведенного ниже проекта в совокупности
db.getCollection("dummy").aggregate([
{ $match: {} },
{
$project: {
a: {
$cond: {
if: { $in: ["a", "$allowed"] },
then: "$a",
else: "$$REMOVE",
},
},
b: {
$cond: {
if: { $in: ["b", "$allowed"] },
then: "$b",
else: "$$REMOVE",
},
},
},
},
]);
, но для этого также требуется перечисление всех полей. Я ищу альтернативное решение, которое проецирует поля в разрешенном массиве без перечисления всех полей вручную в $ project.