到目前为止,我还没有找到答案(无论是我自己的努力还是在线)。
这是一个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();
});
})
当我使用mongo命令在shell中打开此数据库时,我看到的“loc”值仍为0,0(而不是100,100)。
感谢任何修复建议。
由于 海军
答案 0 :(得分:3)
loc
是一个混合类型字段。当你改变它们时,需要告诉Mongoose在保存之前字段已经改变:
rec.setValue('loc', loc);
rec.markModified('loc');
rec.save(...);
为什么那是is explained here。