У меня есть коллекция, подобная следующей:
{
id: 1,
names: {
first: 'Ana',
second: '',
third: 'Smith',
four: 'Smitchd'
},
used: [
{
position: 'first',
id: 'A'
},
{
position: 'second',
id: 'B'
},
]
}
Мне нужно посчитать, сколько used names
имеют коллекции через документы, за исключением того, что они пусты.
Позиция names
используемые сохраняются в массиве с именем used
.
В этом примере мне нужно сосчитать имена, которые существуют внутри used
, но в names
не пусто
Я попытался с помощью агрегации использовать редуктор для обхода массивов used
и я могу посчитать элементы внутри массивов, но я не могу использовать имена полей внутри приведения.
db.collection.aggregate([
{ $match: id: 1 },
{ $project: {
totalUsed: $reduce: {
input: '$used',
initialValue: 0,
in: { $add: ['$$value', { $cond: [{ $eq: ["$$name.$$this.position", '' ]}, 1, 0] }]}
}
}}
])
Мне нужно получить количество использованных пустых имен ... В примере я должен получитьcount: 1, потому что, даже когда используется existe first и secodn, поле names.second пусто.