2013-03-30 3 views
2

Я пока не нашел ответа (как своими силами, так и в Интернете).Обновления записи не сохраняются в базе данных mongo (nodejs + mongo)

Это фрагмент кода NodeJS и использует mongodb в бэкэнд.

В коде я перебираю коллекцию (mongo) и обновляю определенное поле в каждой записи.

Не удается сохранить, внести изменения в запись в базу данных.

Код: -

var mongoose = require('mongoose') 
    ; 

var Centers = mongoose.model('centers', new mongoose.Schema({ 
    "ChestClinic": String, 
    "TestCenterName": String, 
    ... 
    "loc": { 
     "type": { 
     "lon": Number, 
     "lat": Number 
    }, 
    "index": '2d' 
    } 
}); 

mongoose.connect("mongodb://localhost/tblabsdb"); 

Centers.find({}, function(err, recs) { 
    var me = this 
     ; 
    async.forEachSeries (recs, function(rec, callback) { 
     var loc = { lon: 100, lat: 100 }; 
     rec.setValue ('loc', loc); 
     rec.save (function (err, rec) { 
      if (!err) { 
       console.log(rec); 
      } else { 
       console.log ('Error while saving'); 
      } 
      callback(); 
     }); 
    }, function(err) { 
     console.log ('\ncomplete'); 
     process.exit(); 
    }); 
}) 

Когда я открываю эту базу данных в оболочке с помощью команды Монго, значения, которые я вижу в «LOC» по-прежнему 0, 0 (вместо 100100).

Оцените любые предложения по его фиксации.

Благодаря Морской

ответ

3

loc представляет собой смешанный тип поля. При изменении тех, Mongoose нужно сказать, поле изменилось перед сохранением:

rec.setValue('loc', loc); 
rec.markModified('loc'); 
rec.save(...); 

Почему это is explained here.

+0

Это может быть проблема с закрытием, когда вы пытаетесь сделать один запрос внутри другого без обещаний. –

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