我正在尝试:
- 根据搜索条件查找文档,
- 如果找到,则更新一些属性;
- 如果没有找到,则插入一个带有某些属性的文档。
我正在使用 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
};
这是我尝试进行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);
});
为什么不会进行upsert/更新操作呢?
注意
这是使用waterline ORM编写的JS代码,它还使用mongodb本地驱动程序。