Обновить поле в mongoDB подстрокой - PullRequest
0 голосов
/ 13 декабря 2018

Я хотел бы сократить все длинные описания в моем объекте.Я искал и прочитал много статей, но я не могу понять, как выполнить эту простую задачу в mongoDB.То, чего я пытаюсь добиться, было бы просто в SQL:

UPDATE AssetDocument SET description = substr(description, 0, 500) WHERE length(description) > 500

Может кто-нибудь помочь мне сделать это в MongoDB?

Я пробовал это:

db.AssetDocument.updateMany(
{$where: "this.metadata.description.length > 500"},
{$set: { "metadata.description": { $substr: ["metadata.description", 0, 500]}}});

Это дает мне errmsg: The dollar ($) prefixed field '$substr' in 'metadata.description.$substr' is not valid for storage.

Тогда я попробовал это:

db.AssetDocument.find({
  $where: "this.metadata.description.length > 500"
}).forEach(function(e){
  e.metadata.description = {$substr: [e.metadata.description, 0, 500]};
  db.AssetDocument.save(e);
});

Но это не работает ...

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

вы можете использовать как

db.AssetDocument.find({}).forEach(function(e)
{ if(e.description.length<500) 
e.metadata.description=  e.metadata.description.substr(0,500)
 db.AssetDocument.save(e);
});
0 голосов
/ 13 декабря 2018

Это должно работать:

db.AssetDocument.find({
  $where: "this.description.length > 500"
}).forEach(function(e){
  e.description = e.description.substr(0,500);
  db.AssetDocument.save(e);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...