如何在MongoDB中正确进行批量更新/更新

我试图:

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

我正在使用,Bulk.unOrderedOperation因为我也在执行单个插入操作。我想在一次操作中完成所有操作。

但是,它什么都不会导致为更新/向上插入操作插入任何内容。

这是插入文档:

  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()

}

这是最新资料:

  var lineUpPointsGeneralRecord = {

teamId: lineup.team, // String

teamName: home.team.name, // String

userId: home.iduser, // String

userName: home.user.name, // String

round: 0,

signupPoints: home.signupPoints, // String

lfPoints: roundPoints+home.signupPoints, // Number

roundPoints: [roundPoints] // Number

};

这就是我试图更新/更新的方式:

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是正确支持Bulk操作的最新版本,并包含最新的节点本机驱动程序。最新的版本支持v2驱动程序。

以上是 如何在MongoDB中正确进行批量更新/更新 的全部内容, 来源链接: utcz.com/qa/435851.html

回到顶部