【问题标题】:Updates to a record are not getting persisted in mongo database (nodejs + mongo)对记录的更新没有持久保存在 mongo 数据库中(nodejs + mongo)
【发布时间】:2013-03-20 21:55:28
【问题描述】:

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

这是一个 NodeJS 代码 sn-p 并在后端使用 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)。

感谢任何有关修复它的建议。

谢谢 海军

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

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

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

    为什么是is explained here

    【讨论】:

    • 当您尝试在没有承诺的情况下尝试在另一个查询中执行一个查询时,这也可能是闭包问题。
    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 2014-08-04
    • 2020-04-15
    • 2017-12-07
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多