RunCommand MongoDB намного медленнее, чем прямой вызов

У меня есть две команды монго, которые, по моему мнению, должны привести к одинаковым результатам:

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.getLastError({j:1, w:1});};

for(var i=0;i<1000;i++){db.test.insert({a:1}); db.runCommand({getLastError:1, j:1, w:1});};

Обе команды выполняют вставки корректно, однако вторая - примерно в 100 раз медленнее (500 мс против 45 с). Кто-нибудь знает, почему это так? Разница присутствует только тогда, когда задано {j:1}, так что, возможно, это как-то связано с некоторыми проблемами журналирования?

1 ответ

Решение

Вторая команда фактически ожидает фиксации журнала, тогда как первая - нет, и, следовательно, разница. При использовании помощника оболочки getLastError вы не можете передать опцию j. Это должно быть число или строка, соответствующие параметру w команде базы данных getlasterror, как описано здесь.

Другие вопросы по тегам