MongoDB: как объединить строки из двух полей


Вы можете использовать следующий синтаксис для объединения строк из двух полей в новое поле в MongoDB:

db.myCollection.aggregate([
 { $project : { newfield: { $concat : [ " $field1", " -", " $field2 " ] } } },
 { $merge : "myCollection" }
])

В этом конкретном примере строки из «field1» и «field2» объединяются в новое поле с названием «newfield» и добавляются новое поле в коллекцию с названием myCollection .

В следующем примере показано, как использовать этот синтаксис на практике с группами сбора со следующими документами:

db.teams.insertOne({team: " Mavs", conference: " Western", points: 31})
db.teams.insertOne({team: " Spurs", conference: " Western", points: 22})
db.teams.insertOne({team: " Rockets", conference: " Western", points: 19})
db.teams.insertOne({team: " Celtics", conference: " Eastern", points: 26})
db.teams.insertOne({team: " Cavs", conference: " Eastern", points: 33})
db.teams.insertOne({team: " Nets", conference: " Eastern", points: 38})

Пример: объединение строк в MongoDB

Мы можем использовать следующий код, чтобы объединить строки из полей «команда» и «конференция» в новое поле с названием «teamConf» и добавить это поле в коллекцию команд :

db.teams.aggregate([
 { $project : { teamConf: { $concat : [ " $team", " -", " $conference " ] } } },
 { $merge : "teams" }
])

Вот как теперь выглядит обновленная коллекция:

{ _id: ObjectId("62013d8c4cb04b772fd7a90c"),
 team: 'Mavs',
 conference: 'Western',
 points: 31,
 teamConf: 'Mavs - Western' }
{ _id: ObjectId("62013d8c4cb04b772fd7a90d"),
 team: 'Spurs',
 conference: 'Western',
 points: 22,
 teamConf: 'Spurs - Western' }
{ _id: ObjectId("62013d8c4cb04b772fd7a90e"),
 team: 'Rockets',
 conference: 'Western',
 points: 19,
 teamConf: 'Rockets - Western' }
{ _id: ObjectId("62013d8c4cb04b772fd7a90f"),
 team: 'Celtics',
 conference: 'Eastern',
 points: 26,
 teamConf: 'Celtics - Eastern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a910"),
 team: 'Cavs',
 conference: 'Eastern',
 points: 33,
 teamConf: 'Cavs - Eastern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a911"),
 team: 'Nets',
 conference: 'Eastern',
 points: 38,
 teamConf: 'Nets - Eastern' } 

Обратите внимание, что в каждом документе есть новое поле под названием «teamConf», которое содержит объединение полей «группа» и «конференция».

Для этого конкретного примера мы решили объединить две строки вместе, используя тире в качестве разделителя.

Однако мы могли бы объединить две строки без значения разделителя между ними.

Следующий код показывает, как это сделать:

db.teams.aggregate([
 { $project : { teamConf: { $concat : [ " $team", " $conference " ] } } },
 { $merge : "teams" }
])

Вот как будет выглядеть обновленная коллекция:

{ _id: ObjectId("62013d8c4cb04b772fd7a90c"),
 team: 'Mavs',
 conference: 'Western',
 points: 31,
 teamConf: 'MavsWestern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a90d"),
 team: 'Spurs',
 conference: 'Western',
 points: 22,
 teamConf: 'SpursWestern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a90e"),
 team: 'Rockets',
 conference: 'Western',
 points: 19,
 teamConf: 'RocketWestern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a90f"),
 team: 'Celtics',
 conference: 'Eastern',
 points: 26,
 teamConf: 'CelticsEastern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a910"),
 team: 'Cavs',
 conference: 'Eastern',
 points: 33,
 teamConf: 'CavsEastern' }
{ _id: ObjectId("62013d8c4cb04b772fd7a911"),
 team: 'Nets',
 conference: 'Eastern',
 points: 38,
 teamConf: 'NetsEastern' } 

Обратите внимание, что новое поле под названием «teamConf» содержит объединение полей «команда» и «конференция» без каких-либо значений разделителя между ними.

Примечание.Полную документацию по функции $concat можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:

MongoDB: как проверить, содержит ли поле строку
MongoDB: как добавить новое поле
MongoDB: как удалить поле

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.