如何在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