【问题标题】:Why was mongoose designed in this way?为什么猫鼬是这样设计的?
【发布时间】:2012-04-23 22:09:42
【问题描述】:

我是猫鼬的新手,
如果我想定义一个模型,我可以使用以下内容:

var ArticleSchema = new Schema({
    _id: ObjectId,
    title: String,
    content: String,
    time: { type: Date, default: Date.now }
});
var ArticleModel = mongoose.model("Article", ArticleSchema);

但为什么不直接写这样的代码:

var ArticleModel = new Model({ 
    // properties
});

为什么猫鼬是这样设计的?有没有可以重复使用“ArticleSchema”的情况?

【问题讨论】:

    标签: node.js mongodb model mongoose odm


    【解决方案1】:

    是的,有时我将架构拆分为单独的文件并执行此类操作。

    // db.js 
    var ArticleSchema = require("./ArticleSchema");
    mongoose.Model("Article", ArticleSchema);
    

    只有在模型上有一堆静态方法和其他方法并且主模型文件变得混乱时,它才真正有用。

    【讨论】:

    • 如果你这样做了:var ArticleSchema = require("./ArticleSchema"); var Article1 = mongoose.Model("Article1", ArticleSchema); var Article2 = mongoose.Model("Article2", ArticleSchema); 你将如何在另一个文件中导入/要求这些集合?```
    【解决方案2】:

    这样设计的,您可以为不映射到不同模型的子文档定义架构。请记住,集合和模型之间存在一对一的关系。

    来自Mongoose website

    var Comments = new Schema({
        title     : String
      , body      : String
      , date      : Date
    });
    
    var BlogPost = new Schema({
        author    : ObjectId
      , title     : String
      , body      : String
      , buf       : Buffer
      , date      : Date
      , comments  : [Comments]
      , meta      : {
          votes : Number
        , favs  : Number
      }
    });
    
    var Post = mongoose.model('BlogPost', BlogPost);
    

    【讨论】:

    • 我明白了。非常感谢。而且我认为这样的设计也可以使架构在具有相同架构的不同集合时可重用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 2016-03-31
    • 2014-12-09
    • 2015-05-20
    • 2017-03-31
    相关资源
    最近更新 更多