Вы можете использовать функцию $substr в MongoDB для извлечения подстроки из строки.
Эта функция использует следующий базовый синтаксис:
db.myCollection.aggregate([
{ $project : {substring: { $substr : [ " $fullstring", 0, 4 ] }}}
])
Этот конкретный пример извлекает четыре символа из поля с названием «fullString», начиная с позиции 0.
В следующем примере показано, как использовать этот синтаксис на практике при продаже коллекций со следующими документами:
db.sales.insertOne({yearMonth: 201702, amount: 40 })
db.sales.insertOne({yearMonth: 201802, amount: 32 })
db.sales.insertOne({yearMonth: 201806, amount: 19 })
db.sales.insertOne({yearMonth: 201910, amount: 29 })
db.sales.insertOne({yearMonth: 201907, amount: 35 })
Пример: как использовать функцию $susbtr в MongoDB
Мы можем использовать следующий код, чтобы извлечь первые четыре символа из поля «yearMonth» и отобразить их в новом поле под названием «year»:
db.sales.aggregate([
{ $project : {year: { $substr : [ " $yearMonth", 0, 4 ] }}}
])
Этот код производит следующий вывод:
{ _id: ObjectId("620145544cb04b772fd7a929"), year: '2017' }
{ _id: ObjectId("620145544cb04b772fd7a92a"), year: '2018' }
{ _id: ObjectId("620145544cb04b772fd7a92b"), year: '2018' }
{ _id: ObjectId("620145544cb04b772fd7a92c"), year: '2019' }
{ _id: ObjectId("620145544cb04b772fd7a92d"), year: '2019' }
Обратите внимание, что первые четыре символа из поля «monthYear» в каждом документе отображаются в новом поле с названием «year».
Важно отметить, что этот код отображает только подстроку.
Чтобы фактически добавить новое поле в коллекцию, содержащую эту подстроку, мы должны использовать функцию $merge следующим образом:
db.sales.aggregate([
{ $project : {year: { $substr : [ " $yearMonth", 0, 4 ] }}},
{ $merge : "sales" }
])
Вот как теперь выглядит обновленная коллекция:
{ _id: ObjectId("620145544cb04b772fd7a929"),
yearMonth: 201702,
amount: 40,
year: '2017' }
{ _id: ObjectId("620145544cb04b772fd7a92a"),
yearMonth: 201802,
amount: 32,
year: '2018' }
{ _id: ObjectId("620145544cb04b772fd7a92b"),
yearMonth: 201806,
amount: 19,
year: '2018' }
{ _id: ObjectId("620145544cb04b772fd7a92c"),
yearMonth: 201910,
amount: 29,
year: '2019' }
{ _id: ObjectId("620145544cb04b772fd7a92d"),
yearMonth: 201907,
amount: 35,
year: '2019' }
Обратите внимание, что новое поле с названием «год» было добавлено к каждому документу в коллекции и отображает первые четыре символа из поля «годмесяц».
Примечание.Полную документацию по функции $substr можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:
MongoDB: как проверить, содержит ли поле строку
MongoDB: как объединить строки из двух полей
MongoDB: как заменить строки