为什么Mongoose被设计成这种方式?

4
我是一名新手,对Mongoose不熟悉。
如果我想定义一个模型,可以使用以下代码:
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
});

为什么mongoose被设计成这样?有没有情况下我可以重用“ArticleSchema”?
2个回答

9

它的设计是为了让您可以为不映射到不同模型的子文档定义模式。请记住,集合和模型之间存在一对一的关系。

来自Mongoose网站

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);

1
我明白了。非常感谢。我认为以这种方式设计还可以在具有相同模式的不同集合时使模式可重用。 - Kevin

4

有时我会将Schema拆分成单独的文件并进行这种操作。

// 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); 你该如何在另一个文件中导入/引用这些集合?``` - morgs32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接