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
Ми можемо використати такий код, щоб об’єднати рядки з полів «team» і «conference» у нове поле під назвою «teamConf» і додати це поле до колекції teams :
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», яке містить об’єднання полів «team» і «conference».
Для цього конкретного прикладу ми вирішили об’єднати два рядки, використовуючи дефіс як роздільник.
Однак ми можемо об’єднати два рядки без будь-яких значень роздільників між ними.
Наступний код показує, як це зробити:
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» містить конкатенацію полів «team» і «conference» без будь-якого значення розділення між ними.
Примітка . Ви можете знайти повну документацію для функції $concat тут .
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові операції в MongoDB:
MongoDB: як перевірити, чи поле містить рядок
MongoDB: Як додати нове поле
MongoDB: як видалити поле