Запустил следующий простой тест из оболочки:
for(var i = 0; i < 100000; i++) { db.foo.save({ _id : i, x : 1 }) }
db.foo.count(); // should be 100k
query = []
for(var i = 0; i < 10000; i++) { query.push(i) }
db.foo.update( { _id : {$in:query} }, {$inc : {x:1} }, false, true)
db.foo.find({x:2}).count() // should be 10k
Производительность была разумной, похоже, она может обрабатывать 10 000 одновременных обновлений.
Я не могу найти никаких признаков того, что существует ограничение hard на размер массива. Я думаю, что вы можете применить здесь «разумный» лимит. Даже если вы можете выдавать команды с массивом 100 КБ, отследить это будет сложно.
Некоторые драйверы также допускают команды массового обновления, которые могут быть более подходящими для того, что вы делаете.