Моя структура данных MongoDB выглядит следующим образом:
{
users: [{
userref: "User1",
results: [{
testref: "TEST1",
history: [{
score: 10
}, {
score: 15
}]
}, {
testref: "TEST2",
history: [{
score: 2
}, {
score: 1
}]
}]
}]
}
У меня есть коллекция пользователей, каждый из которых имеет массив результатов (один объект результата для каждого теста), и в каждом результате массив история исторических оценок.
Что мне нужно сделать, так это "вернуть ссылку на пользователя для всех пользователей, у которых самая последняя оценка за TEST1 равна X, а самая последняя оценка за TEST2 - Y" . Пользователи, не прошедшие тот или иной из этих тестов, не подлежат возврату. Под «самым последним» я подразумеваю последнее в массиве.
Я предполагаю, что мне нужно использовать агрегацию, но я новичок в этом, поэтому мог бы с некоторой помощью.
Это то, что я пробовал до сих пор, и он работает, но он соответствует только условию, где TEST1 = 15, и я также хотел бы, чтобы он соответствовал условию TEST2 = 1.
[{$unwind: {
path: '$results’,
preserveNullAndEmptyArrays: false
}}, {$match: {
'results.testref': 'TEST1'
}}, {$project: {
results: 1,
userref: 1,
}}, {$replaceRoot: {
newRoot: {
$mergeObjects: [
{
userref: '$userref'
},
'$results'
]
}
}}, {$project: {
userref: 1,
history: {
$slice: [
'$history',
-1
]
}
}}, {$match: {
'history.score': 15
}}, {$project: {
userref: 1,
}}]
Спасибо