[英]Why mongoose.model('Model').Schema is going wrong?
I can't find what I'm doing wrong... I'm trying to define sub-docs in mongoose models, but when I split Schema definitions into another file, childrens model aren't respected. 我找不到我在做什么错...我试图在猫鼬模型中定义子文档,但是当我将Schema定义拆分到另一个文件中时,不尊重子模型。
First, defining a Comment schema: 首先,定义一个Comment模式:
var CommentSchema = new Schema({
"text": { type: String },
"created_on": { type: Date, default: Date.now }
});
mongoose.model('Comment', CommentSchema);
Next, creating another schema by loading from mongoose.model() (like we would loading it from another file 接下来,通过从mongoose.model()加载来创建另一个模式(就像我们从另一个文件中加载它一样)
var CommentSchema2 = mongoose.model('Comment').Schema;
Now defining parent schema: 现在定义父模式:
var PostSchema = new Schema({
"title": { type: String },
"content": { type: String },
"comments": [ CommentSchema ],
"comments2": [ CommentSchema2 ]
});
var Post = mongoose.model('Post', PostSchema);
And some tests 和一些测试
var post = new Post({
title: "Hey !",
content: "nothing else matter"
});
console.log(post.comments); // []
console.log(post.comments2); // [ ] // <-- space difference
post.comments.unshift({ text: 'JOHN' });
post.comments2.unshift({ text: 'MICHAEL' });
console.log(post.comments); // [{ text: 'JOHN', _id: 507cc0511ef63d7f0c000003, created_on: Tue Oct 16 2012 04:07:13 GMT+0200 (CEST) }]
console.log(post.comments2); // [ [object Object] ]
post.save(function(err, post){
post.comments.unshift({ text: 'DOE' });
post.comments2.unshift({ text: 'JONES' });
console.log(post.comments[0]); // { text: 'DOE', _id: 507cbecd71637fb30a000003, created_on: Tue Oct 16 2012 04:07:13 GMT+0200 (CEST) } // :-)
console.log(post.comments2[0]); // { text: 'JONES' } // :'-(
post.save(function (err, p) {
if (err) return handleError(err)
console.log(p);
/*
{ __v: 1,
title: 'Hey !',
content: 'nothing else matter',
_id: 507cc151326266ea0d000002,
comments2: [ { text: 'JONES' }, { text: 'MICHAEL' } ],
comments:
[ { text: 'DOE',
_id: 507cc151326266ea0d000004,
created_on: Tue Oct 16 2012 04:07:13 GMT+0200 (CEST) },
{ text: 'JOHN',
_id: 507cc151326266ea0d000003,
created_on: Tue Oct 16 2012 04:07:13 GMT+0200 (CEST) } ] }
*/
p.remove();
});
});
As you can see, with CommentSchema, ids and default properties are correctly set. 如您所见,使用CommentSchema可以正确设置id和默认属性。 But with CommentSchema2, the loaded one, it's going wrong. 但是使用CommentSchema2(已加载的CommentSchema2),它就出错了。
I've tried to use a 'population' version but it's not what I'm looking for. 我尝试使用“人口”版本,但这不是我想要的。 I don't want to have to use another collection. 我不想使用另一个集合。
Does anyone of you know what's wrong ? 你们当中有人知道怎么了吗? Thanks ! 谢谢 !
mongoose v3.3.1 猫鼬v3.3.1
nodejs v0.8.12 nodejs v0.8.12
Full gist: https://gist.github.com/de43219d01f0266d1adf 完整要点: https : //gist.github.com/de43219d01f0266d1adf
The Schema object of a Model is accessible as Model.schema
, not Model.Schema
. 可通过Model.schema
而不是Model.Schema
来访问Model的Schema对象。
So change line 20 of your gist to: 因此,将要点的第20行更改为:
var CommentSchema2 = mongoose.model('Comment').schema;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.