我有这个架构:
var schema = {
id : { type:Number, unique:true },
name : String,
kind : String,
size : Object,
skin : String,
position : Object,
velocity : Object,
acceleration : Object,
spritesheet : String,
animation : Object,
animations : Object,
currentAnimation : String,
visible : Boolean
};
注意:以下 this
是商务对象的实例 . this.dao
设置如下:
var elementSchema = mongoose.Schema(schema);
this.dao = mongoose.model('Element', elementSchema);
在这里你有我用来获取数据的方式:
this.dao.findOne({"id":id},(function(err,result){
this.data = result;
}).bind(this)) ;
我在我的对象中这样保存:
this.data.save((function(err,result,row){
if(err !== null) throw err;
if(row === 1) {
console.log(result);
this.emit("saved");
}
}).bind(this)) ;
The problem :
它适用于很多类型的模式,但我遇到了 Object
类型的奇怪问题 .
当我尝试保存我的数据时,它适用于所有但不适用于对象类型 . 控制台中显示了一个console.log(this.data.position) {x:100,y:200}
. 但如果我像这样改变 data.position
: data.position = {x:100,y:200}
并在它工作后保存!
My hypothesis :
可能是我的data.position有一个原型属性当我尝试保存它并且无法保存数据 . 问题是我没有错误,在保存功能的回调中, result
var显示了我的应用程序数据...
注意:我只是看到它不是官方的SchemaType(http://mongoosejs.com/docs/schematypes.html)......
My questions :
如何使用mongoose在文档中正确保存 Object
?如果保存失败,为什么我没有错误?
(我更新到最后一个版本3.8.8,我遇到了同样的问题) .
1 回答
我明白了:http://mongoosejs.com/docs/api.html#document_Document-markModified
在混合类型(我的对象类型是什么)中,我们需要指定他们用下面的函数更改它们的mongoose:
this.data.markModified('position');