我在网上看到的大部分示例都做了类似于...
var UserSchema = new mongoose.Schema({
name: String,
age: String
});
然而,最近我发现一本书可以完成上述操作...但没有使用new关键字。
var UserSchema = mongoose.Schema({
name: String,
age: String
});
我现在很困惑。我们是使用新关键字来创建模式还是不使用?在这两种情况下会发生什么?
我在网上看到的大部分示例都做了类似于...
var UserSchema = new mongoose.Schema({
name: String,
age: String
});
然而,最近我发现一本书可以完成上述操作...但没有使用new关键字。
var UserSchema = mongoose.Schema({
name: String,
age: String
});
我现在很困惑。我们是使用新关键字来创建模式还是不使用?在这两种情况下会发生什么?
两者都是有效的,并返回Mongoose.Schema
类的新实例。这意味着两者完全相同。此代码行检查您是否已经拥有Schema类的实例,如果没有,则为您返回一个。
综上所述,如果您调用
var schema = new mongoose.Schema({})
如果您调用函数,则会自动初始化一个实例,而如果您自己初始化实例,则需要手动执行此操作。
var schema = mongoose.Schema({})
mongoose 会为你初始化一个模型,包括以下内容:
mongoose initializes one for you, with this:
function Schema(obj, options) {
if (!(this instanceof Schema)) {
return new Schema(obj, options);
}
...
mongoose.Schema
是一个Class
,你必须通过使用new Class()
来初始化实例才能使用它。 - Svenskunganka是的,我同意上面的答案。但是在这里,我想补充一些更重要的要点。看着Mongoose文档,我觉得它应该总是使用new关键字调用,因为Schema是一个构造函数。
两者都可以工作并且有效,但我的建议是只使用new mongoose.Schema()
,因为这是正确的方式。遵循标准约定将使您的代码更易于阅读;不仅对他人而言,对于您自己在6个月后回顾代码时也是如此。