为什么不保存这些MongoDB文档更改?

时间:2014-05-20 07:28:18

标签: node.js mongodb mongoose

此代码旨在对MongoDB集合中的所有文档进行批量更改。但是,运行此代码后,集合中的文档完全没有变化。这有什么问题?

var mongoose = require('mongoose'),
    async = require('async'),
    Person = require('../../model/Person');

mongoose.connect('mongodb://localhost/people-questions');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));

Person.find(function (err, people) {
    if (err) return console.error(err);

    //download bio info
    async.each(people, function(person, callback) {
        person.birthdateYear = '01';
        person.save();
        callback();
    });

    mongoose.connection.close();
});

我已经确认,在终端中打开mongo cli实例并运行db.people.find();以查看该字段根本没有更新,以及db.people.find({ "_id" : ObjectId("5379e6e21fe1e8e2fc364d17")});之类的查询引用,没有进行任何更改特定ID,用于验证我的Javascript代码是否确实连接到正确的数据库,并使用正确的集合(该ID来自之前的脚本,使用相同的连接详细信息打印出文档ID)。

另外,我使用的是Mongoose。在创建原始文档之后,Mongoose Schema已更新为包括birthdateYear等额外字段,但是从googling和Mongo Docs读取我已经完成的内容,好像Schema更改不需要任何特殊工作 - 您可以设置属性立即对应具有更新架构的文档(无论如何都应该能够)。

2 个答案:

答案 0 :(得分:1)

更新未持久化的原因是在save()回调有机会完成之前,与MongoDB的连接已关闭。通过确保在关闭连接之前完成所有save()回调,数据将被保存。

答案 1 :(得分:0)

person.save是一个异步函数 尝试像

这样的东西
person.save (function(err){
    if(err) console.log(err);
    callback(); 
});