У меня есть документы со структурой, подобной этой:
{
users_ids: [
"122djdj-sdsddsl-3232323",
"2332333-443rdds-sdadads"
],
users_roles: {
"122djdj-sdsddsl-3232323": "admin",
"2332333-443rdds-sdadads": "moderator"
},
users_names: {
"122djdj-sdsddsl-3232323": "John Smith",
"2332333-443rdds-sdadads": "Paul Newman"
}
}
users_ids - это массив с пользователями, тогда это объекты с различными свойствами. Теперь я хотел бы сделать запрос и получить документ с дополнительными полями, такими как:
adminId: 122djdj-sdsddsl-3232323
adminName: John Smith
Все эти поля будут не динамическими c, т.е. будут определены в запросе. Мне нужно, чтобы они сортировали значения, используя, например, имя администратора (поэтому я сначала должен знать, кто такой администратор, а затем добавить поле с именем администратора). Мой вопрос: как я могу использовать поле из документа в других выражениях? Я думал о том, чтобы сначала добавить поля:
{
$addFields: {
userA: { $arrayElemAt: ["$users_ids", 0] },
userB: { $arrayElemAt: ["$users_ids", 1] },
}
}
А затем использовать $ userA и $ userB в других условиях - но любой метод не работает, также попытался $ objectToArray без успеха:
{
$addFields: {
roles: { $objectToArray: "$users_roles" }
}
},
{
$addFields: {
// Doesnt work
adminName: {
$cond: {
if: {
$eq: ["$roles[0].v", 'admin']
},
then: "$roles[0].k",
else: "$roles[1].k"
}
}
}
}