node.js – 如何在MongoDB中正确执行批量upsert / update

我试图:

>根据搜索条件查找文档,
>如果找到,请更新一些属性
>如果没有插入带有某些属性的文档.

我正在使用Bulk.unorderedOperation,因为我还在执行单个插入.而且我想在一次操作中再做一切DB.

然而,正在为更新/ upsert操作插入一些不会导致任何问题.

这是插入文档:

var lineUpPointsRoundRecord = {
    lineupId: lineup.id,// String
    totalPoints: roundPoints,// Number
    teamId: lineup.team,// String
    teamName: home.team.name,// String
    userId: home.iduser,// String
    userName: home.user.name,// String
    round: lineup.matchDate.round,// Number
    date: new Date()
  }

这是upsert文件

var lineUpPointsGeneralRecord = {
    teamId: lineup.team,// String 
    userName: home.user.name,// String
    round: 0,signupPoints: home.signupPoints,// String
    lfPoints: roundPoints+home.signupPoints,// Number 
    roundPoints: [roundPoints] // Number
  };

这就是我尝试upsert / update的方式:

var batch = collection.initializeUnorderedBulkOp();

batch.insert(lineUpPointsRoundRecord);

batch.find({team: lineUpPointsRoundRecord.teamId,round: 0}).
  upsert().
  update({
    $setonInsert: lineUpPointsGeneralRecord,$inc: {lfPoints: roundPoints},$push: {roundPoints: roundPoints}
  });

batch.execute(function (err,result) {
  return cb(err,result);
});

为什么不进行上传/更新?

注意

这是使用水线ORM的JS代码,它也使用mongodb本机驱动程序.

解决方法

这里的语法基本上是正确的,但是你的一般执行是错误的,你应该从其他修改中“分离”“upsert”动作.否则,当发生“upsert”时,这些将“冲突”并产生错误

LineupPointsRecord.native(function (err,collection) {

    var bulk = collection.initializeOrderedBulkOp();

    // Match and update only. Do not attempt upsert
    bulk.find({
        "teamId": lineUpPointsGeneralRecord.teamId,"round": 0
    }).updateOne({
        "$inc": { "lfPoints": roundPoints },"$push": { "roundPoints": roundPoints }
    });

    // Attempt upsert with $setonInsert only
    bulk.find({
        "teamId": lineUpPointsGeneralRecord.teamId,"round": 0
    }).upsert().updateOne({
        "$setonInsert": lineUpPointsGeneralRecord
    });

    bulk.execute(function (err,updateResult) {
        sails.log.debug(err,updateResult);
    });
});

确保您的sails-mongo支持批量操作的最新版本,包括最近的节点本机驱动程序.最近支持v2驱动程序,这对此很好.

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...