简体   繁体   English

为什么mongoose.model('Model')。Schema出错了?

[英]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.

相关问题 猫鼬,在mongoose.model(&#39;core_user&#39;)。schema = new mongoose.schema(…)之后强制更改架构 - Mongoose, enforce changes to schema after mongoose.model('core_user').schema = new mongoose.schema(…) 错误:mongoose.model 不是函数 - Error: mongoose.model is not a function Mongoose.model(&#39;model_name&#39;) 在 mongoose 模型模式文件中需要函数时返回空对象 - Mongoose.model('model_name') return empty object when function is required in the mongoose model schema file 为什么需要 mongoose.model() 从 MongoDB 获取数据? - Why mongoose.model() is required to get data from MongoDB? MissingSchemaError:尚未为模型“用户,userSchema”注册架构。 使用 mongoose.model(name, schema) - MissingSchemaError: Schema hasn't been registered for model "User, userSchema". Use mongoose.model(name, schema) 将Webpack与Mongoose结合使用-mongoose.model不是函数 - Using Webpack with Mongoose - mongoose.model is not a function 索引到mongoose.model中的数组返回未定义 - Indexing into mongoose.model for an array is returning undefined Node.js, MongoDB 错误 - &quot;message&quot;: &quot;Schema 尚未为模型 \\&quot;Category\\&quot; 注册。\\n使用 mongoose.model(name, schema)&quot; - Node.js, MongoDB error - "message": "Schema hasn't been registered for model \"Category\".\nUse mongoose.model(name, schema)" OverwriteModelError:编译后无法覆盖 `User` model。 在 Mongoose.model - OverwriteModelError: Cannot overwrite `User` model once compiled. at Mongoose.model 猫鼬模型架构引用不起作用 - 电子商务模型 - Mongoose model schema referencing not working - Ecommerce model
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM