【问题标题】:when to use new keyword in mongodb?什么时候在 mongodb 中使用 new 关键字?
【发布时间】:2016-10-12 16:33:15
【问题描述】:

我不清楚 node.js 中的 new 关键字。我知道它基本上创建了我的模式的一个实例。但是为什么我在更新时不需要声明new?所以我的问题是什么时候在这里使用new

var User = module.exports = mongoose.model('tokens', userSchema);
//route endpoint here
..
new User({user: user_id, data: data}).save(callback);

如果我在上面的代码中不使用 new 会发生什么?即使我没有,代码的流程也很有意义。如有错误请指正,谢谢。

【问题讨论】:

  • 阅读 this 了解新的介绍。我不知道在这种情况下是否需要 new 以及它实际上做了什么。 (但我怀疑与继承有关)

标签: javascript node.js mongodb mongoose


【解决方案1】:

我知道它基本上是创建我的架构的一个实例。

实际上,在您的第一行代码中,您正在创建模型,该模型使用 架构(不是实例)。在您的最后一行中,您正在创建您第一次创建的 model 的实例(称为 document)。

但是为什么我在更新时不需要声明new

不必每次进行数据库调用时都必须使用 new,但它有一些好处(请参阅最后一个链接)

如果我在上面的代码中不使用 new 会发生什么?

同样的事情也会发生。

所以我的问题是什么时候在这里使用 new。

A good answer to your question。当我实际在数据库中创建行时(即创建新用户时),我选择创建文档。对于搜索(例如)(findOnefindById),我使用该模型。这有助于我在语义上保持代码分离。

【讨论】:

  • 会发生同样的事情吗?那么在上述情况下new 有什么意义呢?它不必验证任何内容(根据您提供的链接)。
【解决方案2】:

如果您需要创建新实体,则需要new关键字。

假设您想在数据库中创建一个新用户。你可以这样做: const user = new User({user: id, data}) 然后你有两个选择,你可以在保存之前改变用户对象,或者使用user.save()立即保存。

像这样:

const user = new User({user: id, data})
user.age = 21;
user.save();

在您的实践中,您会注意到有时您不想在创建实体时将其保存在数据库中。有时在插入 DB 之前,您希望对其进行一些操作。

关于为什么在执行更新之前不需要使用new 关键字的问题。

所以要执行更新,首先您需要从数据库中检索现有文档。 User.find({id: 'someid'}); 在这种情况下,Mongoose 将为您生成一个新对象。 User.find 将返回一个新对象。可以更新,因为它已经在数据库中了。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多