mongoose 无法修改查询后的结果对象
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);
});
});
程序运行结果:
我用了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'; //应该是可以修改成功的
})