在MongoDB中执行批量更新时,我遇到了一个问题:
function getNextSequenceValue(sequenceName)
{
// Some other code to be able to return an incremented int value...
return some_incremented_integer_value;
}
var bulk = db.TempContacts.initializeUnorderedBulkOp();
bulk.find({}).update({$set: {"indexId": getNextSequenceValue("currentId")}});
bulk.execute();
当我使用单个更新运行以上代码时,通过执行以下操作:' db.TempContacts.find()。forEach(update(indexId = getNextSequenceValue))',结果为我的目标是:
文档1:indexId = 1
文档2:indexId = 2,
文档3:indexId = 3,
等
但是当我运行上面的批量更新操作时,所有的'indexId'值都获得相同的值:该函数仅被评估一次,然后将返回的值设置为每个'indexId'。
由于单个文档更新会导致超时(同样在使用跳过操作时),我可能必须使用批量更新机制。 (该集合包含大约8.000.000个文档,因此,跳过值越大,使用跳过变得不可行。)
此行具有相同的效果。该函数仅计算一次:
db.TempContacts.update({}, {$set: {"indexId": getNextSequenceValue()}}, false, true)
也许还有另一种方法可以使批量操作起作用?还是有另一种方法可以在大型集合中插入递增的整数值?