Агрегация MondoDB — переназначение внутренних документов

#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. Извините — моя ошибка. Это работает. Я просматривал записи, в которых эти поля отсутствуют, и ошибочно предположил, что он не работает. Вполне нормально отсутствовать, если их нет.