为啥猫鼬是这样设计的?

Posted

技术标签:

【中文标题】为啥猫鼬是这样设计的?【英文标题】: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”的情况?

【问题讨论】:

【参考方案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);

【讨论】:

我明白了。非常感谢。而且我认为这样的设计也可以使架构在具有相同架构的不同集合时可重用。

以上是关于为啥猫鼬是这样设计的?的主要内容,如果未能解决你的问题,请参考以下文章

设计猫鼬模型

猫鼬设计模型中的嵌入式文档与参考?

猫鼬设计模型中的嵌入式文档与参考?

为啥在 Node.js 中使用猫鼬模式

为啥我无法在猫鼬查询中获取字符串的值?

在群聊应用程序上选择猫鼬模式?