何时在mongodb中使用新关键字?

时间:2016-06-12 00:39:05

标签: javascript node.js mongodb mongoose

我不清楚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,会发生什么?即使我没有,代码的流程也是有意义的。如果我错了,请纠正我,谢谢。

2 个答案:

答案 0 :(得分:1)

  

我知道它基本上创建了我的架构的实例。

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

  

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

每次拨打DB电话时都不一定要使用新电话,但它有一些好处(参见最后一个链接)

  

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

同样的事情会发生。

  

所以我的问题是何时在这里使用新的。

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

答案 1 :(得分:0)

如果您需要创建新实体,则需要

(0>s?(s=-s,'-'):0)+关键字。

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

像这样:

user.save()

在练习中,您会注意到有时您不希望在创建实体时在DB中保存实体。有时在插入DB之前,您希望使用它执行一些操作。

关于在执行更新之前您不需要使用const user = new User({user: id, data}) user.age = 21; user.save(); 关键字的问题。

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