【问题标题】:Creating Mongoose Schemas with or without 'new' keyword?使用或不使用“新”关键字创建猫鼬模式?
【发布时间】:2017-02-04 18:40:23
【问题描述】:

我在网上看到的大多数例子都是这样的......

var UserSchema = new mongoose.Schema({
    name: String,
    age: String
});

但是,最近我发现一本书可以做到上述...但没有新的关键字。

var UserSchema = mongoose.Schema({
    name: String,
    age: String
});

我现在很困惑。我们是否使用 new 关键字来创建架构......以及在这两种情况下会发生什么?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    是的,我同意上述答案。但在这里我想补充一些更重要的观点。看着Mongoose documentation,我觉得应该总是用 new 关键字调用它,因为 Schema 是一个构造函数。

    两者都有效且有效,但我的建议是只使用new mongoose.Schema(),因为它是正确的方法。遵循标准约定将使您的代码更易于阅读;不仅对其他人如此,当你在 6 个月后回到它时,对你也是如此。

    【讨论】:

      【解决方案2】:

      两者都有效并返回Mongoose.Schema 类的新实例。这意味着两者的作用完全相同。这个line 检查您是否已经有 Schema 类的实例,如果没有,它会为您返回一个。

      总结一下,如果你打电话

      var schema = new mongoose.Schema({})
      

      你自己初始化一个实例,而如果你调用

      var schema = mongoose.Schema({})
      

      mongoose 为你初始化一个,用这个:

      function Schema(obj, options) {
        if (!(this instanceof Schema)) {
          return new Schema(obj, options);
        }
        ...
      

      【讨论】:

      • @Grateful 你确定你明白一切吗?我想确保你明白我的意思。您以前是否使用过其他面向对象的语言,例如 PHP?我问的原因是因为mongoose.Schema 是一个Class,您必须使用new Class() 来初始化要使用的实例
      • 我理解你的回答。谢谢。
      • 我很高兴,快乐的编码家伙!
      猜你喜欢
      • 2017-07-07
      • 2014-08-20
      • 2017-06-30
      • 2021-04-16
      • 2018-08-27
      • 2021-11-04
      • 2012-04-22
      • 2018-11-30
      • 2015-03-23
      相关资源
      最近更新 更多