Javascript 是否可以更新mongodb中已打开的文档

Javascript 是否可以更新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

在JS中,是否有更好的方法执行以下操作:

我正在查找一个用户,然后检查密码,然后我希望更新相同用户的文档

我可以利用已经打开的文档(var文档)进行更新吗?或者按照下面的代码进行操作,并在更新时重新搜索name:name

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不一定最快(同样快),但绝对最安全。