CNode

mongoose 无法修改查询后的结果对象

问答
Hhuydev发布于11 年前最后回复8 年前5 回复6622 浏览0 收藏

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)

A
alsotang#1·11 年前
person.age = 0;    
person.date = new Date;    

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

H
huydev#2·11 年前
引用 alsotang试试这个。看看是不是类型问题

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

L
LeafInStrom#3·11 年前
引用 huydev@alsotang 按照你的这个可以修改成功,不过js不是没有区分类型的吗? 而且用node mongodb nactive是可以改类型的。

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

B
Borkes#5·8 年前

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

PersonModel.find({}).lean().then(function(data) {
	data.age = 'aaa';  //应该是可以修改成功的
})
参与回复
登录后即可参与回复。登录