2016-04-28 3 views
0

У меня есть этот сборник в базе данных, он содержит много документов на нем, я бы хотел, чтобы все экземпляры «Æ» были заменены на «ae».mongodb заменить один символ во многих документах

Мои документы выглядеть следующим образом:

{ 
    "_id" : ObjectId("57071e9fee31902f0a9ad989"), 
    "layout" : "normal", 
    "name" : "Æther Flash", 
    "manaCost" : "{2}{R}{R}", 
    "cmc" : 4, 
    "colors" : [ "Red" ] 
} 

Я полагаю, я должен использовать что-то вроде find_one_and_update, может быть?

+0

Все, что я мог бы достичь до сих пор, чтобы найти все из них с db.getCollection («AllCards») найти ({ «имя»: { «$ регулярное выражение»: «Æ»}}). –

+0

Может вы, пожалуйста, показать образец документа? – styvane

+0

{ "_id": ObjectId ("57071e9fee31902f0a9ad989"), "расположение": "нормальный", "название" : "Эфир флэш", "Manacost": "{2} {R} {R}", «cmc»: 4, «Цвета»: [ «Красный» ]} –

ответ

3

Это должно сработать. Это может занять некоторое время в зависимости от того, насколько велика вы db, которая может быть большой, учитывая ее MTG db;), но она должна работать.

db.getCollection('AllCards').find({$or: [{name: {$regex: 'Æ'}}, {name: {$regex: 'æ'}}]}).forEach(function (x) { 
    x.name = x.name.replace(/Æ/g, 'Ae').replace(/æ/g, 'ae'); 

    db.getCollection('AllCards').save(x); 
}); 

Конечно, это только крышки Æs в названии. Но я полагаю, вы можете разобраться, как заставить его работать со всеми необходимыми полями.

Смежные вопросы