MongoDB: удалить первый символ из строкового поля и обновить поле - PullRequest
1 голос
/ 29 апреля 2020

В моих документах есть поле типа string imageUrl: '/xyz/....', но теперь мне нужно удалить первый символ из поля и обновить поле как imageUrl: 'xyz/....' для всех документов.

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

В версии MongoDB> 4.0 вы можете выполнить агрегационный конвейер в .update () , попробуйте выполнить запрос ниже, который перезапишет поле imageUrl новым значение, где $substr помогает обрезать первую букву исходной строки:

db.collection.updateMany({}, 
 [{
    $set: {
      imageUrl: {
        $substrBytes: ["$imageUrl", 1, -1]
      }
    }
  }]
 );

Тест: mongoplayground

Примечание: В целом запрос должен работать нормально, но в прошлом я видел пару проблем, выполняющих .updateMany для таких клиентов, как robo3T или даже с более старой оболочкой mon go, если вы видите это, то я бы предложил использовать .update() с опцией {multi : true}.

Обновление: В последних версиях MongoDB> = 3.4 необходимо использовать $substrBytes, который является псевдонимом для $substr. Кроме того, если вы хотите проверить, существует ли / в качестве первого символа для поля imageUrl, вам необходимо добавить {imageUrl: /^[/]/} в часть фильтра .updateMany().

1 голос
/ 29 апреля 2020

Что-то вроде

db.collection.update(
         {},
         [{$set:{
            imageUrl:{
                 $substrBytes:[
                               "$imageUrl",
                               1,
                               { $subtract: [ { $strLenBytes: "$imageUrl" }, 1 ] }
                 ]
            }
         }}],
         {multi:true}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...