Я маю .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
Ви повинні були б написати якийсь скрипт в оболонці Монго або програмі, який пройшов би, і вручну порівняти елементи.