У меня есть данные, которые выглядят так:
{
"_id" : 1,
"data" : [
{
"id" : 1,
"one" : [
{"user" : 2, "two" : 2},
{"user" : 1, "two" : 3}
]
}
]
}
{
"_id" : 2,
"data" : [
{
"id" : 2,
"one" : [
{"user" : 2, "two" : 2},
{"user" : 1, "two" : 3}
]
}
]
}
И я хочу отфильтровать в совокупности (так как данные выше взяты из предыдущих этапов), так что один массив фильтруется, чтобы показать только один массивэлементы, где пользователь равен _id.
Следующее возвращает пустые один массив, как получить фильтр для заполнения одного массива, как я ожидаю?
db.parks.aggregate([{$project: {_id: 1, 'data.id': 1, 'data.one':
{$filter: {
input: '$data.one',
as: 'un',
cond: {$eq: ['$$un.user', '$_id']}}
}}}]).pretty()
Что дает:
{ "_id" : 1, "data" : [ { "id" : 1, "one" : [ ] } ] }
{ "_id" : 2, "data" : [ { "id" : 2, "one" : [ ] } ] }
Замена '$ _id' на '$$ un.user' показывает все элементы data.one, как и ожидалось, поэтому похоже, что проблема в выражении $ eq.
Как мне заставить фильтр показывать один массив, как я ожидаю?