与UPSERT多语法MongoDB的更新(Mongodb update with upsert an

2019-09-01 15:45发布

我是新来的MongoDB等强调,因为MongoDB的文件不全的离开我试错......可悲的是,我所有的努力都没有,没有错误的工作,使我感到困惑的是什么情况,什么调试...

我只需要符合特定标准的数据库上更新多条记录,并为不存在的记录,创造了新的条目。 我相信我能与更新,更新插入,多一个单一的数据库访问做。 下面是我想出:

dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } } );

我也尝试过多种组合,甚至是旧版本,例如:

dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true } );

他们没有工作...

请帮我这个那么微不足道的东西...我可以很容易地做到这一点在SQL,但NoSQL的啄如此限制对我..谢谢!

编辑:

上找到相同的查询工作完美:

dbschema.Person.find( { person_id: { $in: ["734533604" ,"701084015"] } }, function ( err, results ) {
    console.log( 'result: ' + results );
    console.log( 'error: ' + err );
    console.log( 'result length: ' + results.length );
} );

编辑:

我期待将要创建的“未找到”的记录,而找到的记录进行更新。 我的逻辑可能存在缺陷,我现在这么多的困惑。

本来我是觉得() - 一次荷兰国际集团的一个记录,更改值,并呼吁保存()对于每个修改的记录,但是当我部署到生活,响应时间成为几百时间有一个较慢尤其是当几百记录要对每个请求更新。

然后我发现找到()+ $的,而且性能被恢复,比以前还要好时(查询),但更新仍然太慢。所以,现在我想办法在一个查询更新所有文件。 。

我通常做的SQL中使用更新时,CASE THEN ...例如:

UPDATE person SET score = CASE
WHEN person_id = "734533604" THEN 1200
WHEN person_id = "701084015" THEN 1200
ELSE
score
END

Answer 1:

您不能更新基于不同标准的多个记录,并期望“更新插入”要弄清楚你的意思。 UPSERT标志可能会导致最多一个文件的插入,如果你选中的文档,你会发现它没有任何意义,以对更新“复合”的标准在UPSERT的情况。

在你的榜样,这两个FBID值应该插入使用?

我觉得你的情况,你可以采取几种方法(都涉及多单操作更多)。 您可以使用更新的更新插入标记在一个循环中的每个FBID值调用更新一次 - 这会像你期望,如果FBID没有为它找到一个新的文件将被创建。 其他方面包括查询运行更新之前,但我认为这些方面可能会更容易出现竞争情况。

以下是更新是如何工作的解释-我觉得相当完整: http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag



文章来源: Mongodb update with upsert and multi syntax