#mongodb #aggregate #remap
#mongodb #агрегировать #переназначение
Вопрос:
Как я мог переназначить внутренние документы, подобные этому, в следующем примере:
db.customers.aggregate(
[
{
$project: {
"_id": 0,
"First Name": "customerDetails.firstName",
"Last Name": "customerDetails.lastName",
"Full Name": { $concat : [ "customerDetails.firstName", " ", "customerDetails.lastName" ] }
}
}
]
)
Размещение $, подобного этому «$customer.FirstName», не работает, и вместо того, чтобы принимать значение внутреннего поля FirstName, по сути, оно ничего не возвращает.
Пример структуры сбора клиентов:
{
"_id" : ObjectId("5fb3c41454742e0d3c9f7605"),
"customerDetails" : {
"firstName" : "Robert",
"lastName" : "Green",
"phoneNumber" : "0878712375",
"email" : "robert.green@gmail.com"
}
}
Ожидаемый результат:
{
"First Name": "Robert",
"Last Name": "Green",
"Full Name": "Robert Green"
}
Фактический результат:
{
"First Name": "customerDetails.firstName",
"Last Name": "customerDetails.lastName",
"Full Name": "customerDetails.firstName customerDetails.lastName"
}
Комментарии:
1. было бы здорово, если бы вы могли предоставить образец своих документов и текущий и ожидаемый результат 🙂
2. Что вы подразумеваете под «не работает»?
3. Конечно
$customer.firstName
, не работает, если вызывается полеcustomer**Details**
Ответ №1:
Ссылка на поля с $
, должна работать:
db.customers.aggregate(
[
{
$project: {
"_id": 0,
"First Name": "$customerDetails.firstName",
"Last Name": "$customerDetails.lastName",
"Full Name": { $concat : [ "$customerDetails.firstName", " ", "$customerDetails.lastName" ] }
}
}
]
Комментарии:
1. Опять же, что вы подразумеваете под «не будет работать»?
2. Извините — моя ошибка. Это работает. Я просматривал записи, в которых эти поля отсутствуют, и ошибочно предположил, что он не работает. Вполне нормально отсутствовать, если их нет.