MongoDB: обновление нескольких с помощью $ in - PullRequest
1 голос
/ 22 февраля 2011

Требуются некоторые экспертные предложения по использованию «$ in» при выполнении «обновления» в коллекциях mongodb. Вот пример:

db.users.update({userid: {$in: ['1','2','3']}}, {$inc: {mycounter: 1}}, false, true);

лучше ли использовать $ in в этом сценарии? Также кто-нибудь может подсказать мне, есть ли какое-либо ограничение на количество / размер массива для $ in в моем сценарии выше, это может быть 10k + идентификаторы пользователей на обновление.

Спасибо.

1 Ответ

2 голосов
/ 22 февраля 2011

Запустил следующий простой тест из оболочки:

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 КБ, отследить это будет сложно.

Некоторые драйверы также допускают команды массового обновления, которые могут быть более подходящими для того, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...