node.js - 对记录的更新不会持久保存在 mongodb 数据库中(node js + mongo)

标签 node.js mongodb mongoose

到目前为止我还没有找到答案(无论是通过我自己的努力还是在网上)。

这是一个 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)。

感谢任何修复此问题的建议。

谢谢 海军

最佳答案

loc 是一个混合类型字段。当您更改这些内容时,需要在保存之前告知 Mongoose 该字段已更改:

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

为什么这是is explained here .

关于node.js - 对记录的更新不会持久保存在 mongodb 数据库中(node js + mongo),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15716102/

相关文章:

javascript - MongoDB - 插入项目的返回ID

node.js - NGINX : How to have sticky session with least connected

javascript - 如何使用变量作为字段键获取 Meteor 集合字段值

mongodb - 如何使用聚合计算运行总数?

node.js - mongoose 使用对象 ID 软删除

node.js - 在 Cloud 9 上安装 Mongoose 失败

javascript - 如何缓存自动提示组件的结果?

node.js - Mac OS X NodeJS : has no method 'router' error

python - 如何在 MongoDb 中创建人类可读的 ID

node.js - Mongoose 查询 : how to pass a variable