2017-02-16 4 views
0

Я пытаюсь обновить несколько документов в mongodb, который содержит некоторую ненужную строку. Поэтому мне нужно обновить документы с помощью slice части строки в поле.Mongodb: Обновление документов со срезом значений полей

У меня есть что-то подобное в моем db.

{ 
    "_id" : ObjectId("58a04a6c377c443a3af3dbf9"), 
    "studentNumber" : "S1859/0113", 
    "gender" : "M", 
    "studentName" : "Had To change this", 
    "points" : "34", 
    "division" : "FLD", 
    "subjects" : "CIV-D HIST-F GEO-F KISW-F ENGL-F BIO-F B/MATH-F", 
    "examType" : "CSEE", 
    "examYear" : "2011", 
    "schoolNumber" : "S1859", 
    "schoolName" : "CHANGED SECONDARY SCHOOL", 
    "__v" : 0 

}

Обратите внимание на studentNumber поле имеет S1859/0113 и schoolNumber имеет "S1859". Теперь мне нужно нарезать текст S1859 в поле studentNumber, чтобы просто остаться с 0113.

Я попытался

db.results.find().forEach(function(e) { e.studentNumber = e.studentNumber.split('/').slice(1); e.save() })

Но это дало ошибку e.save() не является функцией.

Я не знаю, как сделать это в:

db.results.update({studentNumber: {$regex: /[PS]{1}[0-9]{4}\/[0-9]{4}/}}, {condition to use}, false, true).

Не уверен, какое условие я должен поставить, чтобы обновить поле в том же документе, нарезая его.

Пожалуйста, помогите.

ответ

1

С forEach, вы можете использовать:

db.results.find().forEach(
    function(e) { 
     e.studentNumber = e.studentNumber.split('/').slice(1).toString(); 
     db.results.save(e); 
    }) 
+0

Спасибо, это сработало! (Tho не так, как ожидалось), но он обновил записи, и теперь мне нужно использовать что-то другое, а не методы выше. – ArchNoob