/ / імпортування об'єктів до колекції mongodb, які не є дублікатами, які видалили їх _id - mongodb

імпортування об'єктів до колекції mongodb, які не є дублікатами, які видалили їх _id - mongodb

Я маю .json файл, який я створив з використанням mongoexport, а потім видалив елементи _id з об'єктів. Я хотів би скористатися цим файлом json, а потім імпортувати його до іншої колекції за допомогою mongoimport, але я хочу пропустити будь-який з об'єктів, які є дублікатами всього, що вже є в колекції (мінус _id тег, оскільки він більше не існує в даних імпортується). Чи є спосіб зробити це?

Відповіді:

1 для відповіді № 1

можна створити унікальний індекс на всіх ключових полях цільової колекції, потім використовувати звичайний mongoimport, він автоматично ігноруватиме дублювання для вас.

у прикладі: колекція imp містить 2 документи

>db.imp.find()
{ "_id" : ObjectId("559eb4d112bc601a37ba6c0e"), "a" : 1, "b" : 1, "c" : 1, "d" : "first" }
{ "_id" : ObjectId("559eb4e512bc601a37ba6c0f"), "a" : 2, "b" : 2, "c" : 2, "d" : "second" }

a, b і c - ключові поля, створюють унікальний індекс на цих полях

> db.imp.ensureIndex({a:1,b:1,c:1},{unique:true})

json файл (imp.json) дублікат з існуючими (першими двома) записами + інший дублікат на: 3, b: 3 і c: 3

{ "a" : 1, "b" : 1, "c" : 1, "d" : "one" }
{ "a" : 2, "b" : 2, "c" : 2, "d" : "two"}
{ "a" : 3, "b" : 3, "c" : 3, "d" : "third"}
{ "a" : 3, "b" : 3, "c" : 3, "d" : "three"}

mongoimport, на mongo 3.0 можна використовувати --maintainInsertionOrder вставляти документи у порядку їх появи в джерелі вхідного сигналу

$ mongoimport -d imp -c imp --file imp.json

Результат імпорту та помилка дублювання ключа в індексі

connected to: 127.0.0.1
2015-07-10T01:14:40.457+0700 insertDocument :: caused by :: 11000 E11000 duplicate key error index: imp.imp.$a_1_b_1_c_1  dup key: { : 1, : 1, : 1 }
2015-07-10T01:14:40.458+0700 insertDocument :: caused by :: 11000 E11000 duplicate key error index: imp.imp.$a_1_b_1_c_1  dup key: { : 2, : 2, : 2 }
2015-07-10T01:14:40.458+0700 insertDocument :: caused by :: 11000 E11000 duplicate key error index: imp.imp.$a_1_b_1_c_1  dup key: { : 3, : 3, : 3 }
2015-07-10T01:14:40.459+0700 imported 4 objects

Нарешті, колекція imp буде виглядати так

> db.imp.find()
{ "_id" : ObjectId("559eb4d112bc601a37ba6c0e"), "a" : 1, "b" : 1, "c" : 1, "d" : "first" }
{ "_id" : ObjectId("559eb4e512bc601a37ba6c0f"), "a" : 2, "b" : 2, "c" : 2, "d" : "second" }
{ "_id" : ObjectId("559eba10394aeed912d00d31"), "a" : 3, "b" : 3, "c" : 3, "d" : "third" }

Сподіваюсь, ця допомога!


0 для відповіді № 2

Ви повинні були б написати якийсь скрипт в оболонці Монго або програмі, який пройшов би, і вручну порівняти елементи.