此代码旨在对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更改不需要任何特殊工作 - 您可以设置属性立即对应具有更新架构的文档(无论如何都应该能够)。
答案 0 :(得分:1)
更新未持久化的原因是在save()回调有机会完成之前,与MongoDB的连接已关闭。通过确保在关闭连接之前完成所有save()回调,数据将被保存。
答案 1 :(得分:0)
person.save是一个异步函数 尝试像
这样的东西person.save (function(err){
if(err) console.log(err);
callback();
});