mongoose 无法修改查询后的结果对象
发布于 9 年前 作者 huydev 6211 次浏览 最后一次编辑是 8 年前 来自 问答

demo代码:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var PersonSchema = mongoose.Schema({
	name: String,
	age: Number,
	birth: Date
});

var PersonModel = mongoose.model('PersonModel', PersonSchema);

var person = {
	name: '张三',
	age: 20,
	birth: new Date()
}
PersonModel.create(person, function(err, person){
	if(err) return console.dir(err);
	console.log('保存成功');
});

PersonModel.find(function(err, persons){
	if(err) return console.dir(err);

	persons.forEach(function(person, index){
		person.name = person.name + index;	// 可以修改
		person.age = 'aaa';		//无法修改
		person.date = 'bbb';	//无法修改
		console.log('查询并修改后的结果:');
		console.log(person);
	});
});

程序运行结果: QQ截图20151015165115.jpg

我用了node-mongodb-nactive实验了,查询出来的结果对象能随意修改,为什么mongoose不能呢? 又在什么地方可以查阅到相关信息呢。

5 回复
person.age = 0;    
person.date = new Date;    

试试这个。看看是不是类型问题

@alsotang 按照你的这个可以修改成功,不过js不是没有区分类型的吗? 而且用node-mongodb-nactive是可以改类型的。

@huydev 这就是mongoose自带的类型检查特性 如果你修改的内容和定义的model不一样 他会尝试转换,如果转换不成功就不更新 这是优点不是缺点

@LeafInStrom 哦哦 谢谢 就是代码出了问题 半天没明白为什么不能修改 这下心安了。

如果加上lean()的话,返回的结构就能随便修改了

PersonModel.find({}).lean().then(function(data) {
	data.age = 'aaa';  //应该是可以修改成功的
})
回到顶部