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: как удалить поле