Javascript 是否可以更新mongodb中已打开的文档
在JS中,是否有更好的方法执行以下操作: 我正在查找一个用户,然后检查密码,然后我希望更新相同用户的文档 我可以利用已经打开的文档(var文档)进行更新吗?或者按照下面的代码进行操作,并在更新时重新搜索name:nameJavascript 是否可以更新mongodb中已打开的文档,javascript,mongodb,Javascript,Mongodb,在JS中,是否有更好的方法执行以下操作: 我正在查找一个用户,然后检查密码,然后我希望更新相同用户的文档 我可以利用已经打开的文档(var文档)进行更新吗?或者按照下面的代码进行操作,并在更新时重新搜索name:name user_collection.findOne({ name:name }, function(err, doc) { if(err) throw err; if(doc) { // verify doc.password et
user_collection.findOne({ name:name }, function(err, doc) {
if(err)
throw err;
if(doc) {
// verify doc.password etc
user_collection.update({ name:name }, {$set: { last_joined:last_joined }}, { upsert:true }, function(err, doc) {
if(err) {
// log error
}
});
}
});
是-使用该方法
doc
中的文档是数据库中记录的内存副本。如果要修改它,然后将其保存到数据库中,则需要像这样使用update
方法,或者使用save(modified_doc)
注意:正如freakish所说,您可能应该使用
user\u collection.update({u id:doc.\u id},…)
而不是再次搜索name
,因为它可能不是唯一的。您所说的“已经打开的文档”是什么意思?没有这样的事。是的,您必须每次搜索。保存与基于\u id
的更新基本相同。假设name
上有一个索引,它将不会提供任何性能提升。如果这就是OP想要的。如果只是缩短代码,那么是的,它将缩短代码。然而,必须注意的是,功能上存在差异。如果name
不是唯一的,则两个操作的行为明显不同。如果他不小心修改了其中一个字段,也会出现问题。使用$set
可以确保只更新指定的字段。@好的,那么最快和最安全的方法是将更新代码从{name:name}更改为{u id:doc.\u id}?听起来不错Thanks@user975033不一定最快(同样快),但绝对最安全。