MongoDB-使用评估值执行批量更新

时间:2019-03-05 17:37:33

标签: mongodb bulkupdate

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

也许还有另一种方法可以使批量操作起作用?还是有另一种方法可以在大型集合中插入递增的整数值?

0 个答案:

没有答案