Неупорядоченная вставка в Mongodb с использованием монголита

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

db.products.insert(
[
{ _id: 20, item: "lamp", qty: 50, type: "desk" },
{ _id: 21, item: "lamp", qty: 20, type: "floor" },
{ _id: 22, item: "bulk", qty: 100 }
],
{ ordered: false }
)

Возможно ли такое с монголитом? Я использую фреймворк для вставки данных в монго.


person Hichemm Medeiros    schedule 27.06.2017    source источник


Ответы (1)


Оболочка mongo преобразует несколько операторов вставки в операция массовой вставки, где применяется поведение упорядоченного и неупорядоченного. Bulk API был представлен в MongoDB 2.6; в более старых версиях MongoDB был API пакетной вставки, у которого была опция «продолжить при ошибке», которая по умолчанию была false.

Пакет mongolite R основан на официально поддерживаемом драйвере libmongoc, но, как и в mongolite 1.2, не предоставляет должным образом параметр для управления поведением массовых вставок. Однако базовые функции mongolite C имеют логическое значение stop_on_error (по умолчанию: TRUE), которое сопоставляется с упорядоченными и неупорядоченными вставками.

Я отправил запрос на перенос (монголит № 99), который пройдет через stop_on_error параметр для объемных вставок.

Это не меняет поведения по умолчанию mongolite, которое будет остановлено при первой ошибке, обнаруженной при массовой вставке. Если для stop_on_error установлено значение FALSE, ошибки будут суммироваться для каждой партии массовых вставок.

Пример использования (где data может быть любым допустимым параметром для insert(), таким как фрейм данных, именованный список или вектор символов со строками JSON):

coll$insert(data, stop_on_error = FALSE)

Возможно, имеет смысл переименовать параметр с stop_on_error на ordered для согласованности с массовым API, но я оставлю это на усмотрение mongolite сопровождающего.

person Stennie    schedule 28.06.2017
comment
Я видел ваш запрос на перенос, и это то, что мне нужно. Я не знаю, как сделать ваш пул-реквест доступным для использования. Стоит ли ждать, пока сопровождающие объединят его? - person Hichemm Medeiros; 28.06.2017
comment
Когда я пытаюсь использовать devtools :: install_github (stennie / mongolite / tree / issue-98), он дает мне Ошибка установки: не похоже на пакет R (без ОПИСАНИЯ) - person Hichemm Medeiros; 28.06.2017
comment
Я использовал devtools::install_github("stennie/mongolite", branch="issue-98"), и он работал, но загруженная версия была 1.2 - person Hichemm Medeiros; 29.06.2017
comment
Я использовал devtools::install_github("stennie/mongolite", ref="issue-98"), и это сработало! Спасибо чувак! - person Hichemm Medeiros; 29.06.2017