Вы можете использовать следующий синтаксис для объединения строк из двух полей в новое поле в 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: как удалить поле