Я испытываю трудности с составлением сложного (для меня) запроса агрегации для моих данных. В общем, вот и все, так что все понимают мою головоломку.
У меня есть две коллекции в этом уравнении. « training_documents » и « users ». Каждый объект пользователя имеет ключ, идентифицируемый по имени " trainings ", который является массивом объектов. Каждый объект в этом массиве тренировок содержит 4 пары ключ / значение. Пример каждого объекта приведен ниже.
{
"document": ObjectId('5a0350ad7df0977d94cffab6'),
"trainee": ObjectId('59e51a4b7df0977d94cff95d'),
"trainer": ObjectId('595fcc2e04cf707693257890'),
"completion_time": "2018-04-23T21:28:22.747Z"
}
Массив пользователей trainings
будет содержать много объектов в соответствии с вышеупомянутым форматом.
Пример структуры пользовательских данных приведен ниже для справки.
[
{
"_id": "5ad782283c55b056bcc39e3z",
"site": {
"site_id": "site1",
"site_name": "Site One"
},
"user_name": "jsmith",
"first_name": "John",
"middle_name": "A",
"last_name": "Smith",
"full_name": "John Smith",
"title": "Duh Boss...",
"email": "testuser@example.com",
"last_login": "2018-04-27T14:27:27.014Z",
"type": "full-time",
"active": true,
"__v": 0,
"badge_id": "000001780343232123",
"trainings": [
{
"document": ObjectId('5ae33622a766885a121b7362'),
"trainee": ObjectId('5ad782283c55b056bcc39e30'),
"trainer": ObjectId('595fcc2e04cf707693257890'),
"completion_time": "2018-04-23T17:40:41.198Z"
},
{
"document": ObjectId('5a0350ad7df0977d94cffab6'),
"trainee": ObjectId('59e51a4b7df0977d94cff95d'),
"trainer": ObjectId('595fcc2e04cf707693257890'),
"completion_time": "2018-04-23T21:28:22.747Z"
}
],
}
]
Мне нужно перебирать каждый объект в массиве пользователей trainings
во время агрегации. В основном мне нужно $lookup
данные, используя ключ _id " document " " стажер " & " trainer " из training_documents
, users
, & users
соответственно, сохраняя их каждый в своих объектах / структуре.
Я уже пытался составить запрос, но не смог выяснить часть итерации.
UserLdap.aggregate([
{ $lookup: {
from: 'training_documents', // Search training documents collection...
localField: 'trainings.document', // Search query is the object id of trainings array.
foreignField: '_id', // key to compare against is _id of trainings[].document.
as: 'trainings.document' // Return results in the trainings array on user.
},
},
]).exec((err, results) => {
if (err) {
console.log(err);
}
else {
res.status(200).json(results);
console.log(results);
}
})
Может кто-нибудь подсказать мне, как составить этот запрос?