MongoDB Aggregation: переименовать поле в mongodb из ObjectId в литерал / строку? - PullRequest
1 голос
/ 10 января 2020

У меня есть коллекция mon go, в которой есть поля id, mobile и name array. Ниже приведен пример моей коллекции:

        {
        "_id": 1,
        "mobile": "555-555-5555",
        "name": { "first" : ObjectId("1122334455") }
        }

        {
        "_id": 2,
        "mobile": "222-222-2222",
        "name": { "first" : ObjectId("5544332211") }
        }

        {
        "_id": 3,
        "mobile": "111-111-1111",
        "name": { "first" : ObjectId("1122334455")}
        }

Я хочу переименовать поле first в массиве name с ObjectId на literal Так что мой вывод будет примерно таким,

       {
        "_id": 1,
        "mobile": "555-555-5555",
        "name": { "first" : "Tom" }
        }

        {
        "_id": 2,
        "mobile": "222-222-2222",
        "name": { "first" : "abigail" }
        }

        {
        "_id": 3,
        "mobile": "111-111-1111",
        "name": { "first" : "Tom"}
        }

1 Ответ

1 голос
/ 10 января 2020

Вы можете использовать $lookup. Я предполагаю, что у вас есть коллекция user_source, в которой хранятся ваши данные пользователя.

db.getCollection('Test01').aggregate(
[
    {
       $lookup:
       {
         from: "user_source",
         localField: "name.first",
         foreignField: "_id",
         as: "fromUsers"
       }
    },
    { $addFields : { "name.first":  {$arrayElemAt: [ "$fromUsers.name", 0 ]} } },
    { $project: { fromUsers: 0 } },
]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...