MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да обедините документи при импортиране на файл в MongoDB

Когато използвате mongoimport за да импортирате файлове в MongoDB, имате възможност да обедините съществуващи документи с тези, които импортирате.

В този случай, ако импортиран документ има същия _id стойност като съществуващ в колекцията, в която импортирате, съществуващият документ ще бъде обединен с този, който се импортира.

Можете също да посочите друго поле (различно от _id поле) да бъде полето за съвпадение, ако е необходимо.

Когато обедините документи, полученият документ ще комбинира съществуващи данни с всички нови данни, които са в импортирания файл. Всички данни, които са едни и същи, ще останат същите. Всички противоречиви данни ще доведат до презаписване на съществуващите данни от импортирания файл. Ако импортираният документ не съдържа поле, което е в съответния документ в колекцията MongoDB, тогава това поле ще остане непроменено в колекцията (т.е. няма да бъде премахнато или променено).

Начинът за обединяване на документи с mongoimport е да използвате merge режим.

Пример

Да предположим, че имаме колекция, наречена pets които съдържат следните документи:

db.pets.find() 

Резултат:

{ "_id" :1, "name" :"Wag", "type" :"Dog" }{ "_id" :2, "name" :"Laj", "type" :"Dog" }{ "_id" :3, "name" :"Мяу", "type" :"Котка" }

И имаме следния JSON файл, наречен pets.json :

{"_id":2.0,"name":"Извличане","type":"Куче","weight":40.0}{"_id":3.0,"weight":10.0}{"_id":4.0,"name":"Hop","type":"Kenguroo","weight":60.0}

Следната команда импортира JSON файла в колекцията:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json 

Това използва merge режим за сливане на съвпадащи документи с импортираните.

Проверете резултатите

Нека да разгледаме колекцията сега.

db.pets.find() 

Резултат:

{ "_id" :1, "name" :"Wag", "type" :"Dog" }{ "_id" :2, "name" :"Извличане", "type" :"Dog", " тегло" :40 }{ "_id" :3, "name" :"Мяу", "тип" :"Котка", "тегло" :10 }{ "_id" :4, "име" :"Хоп", " тип" :"Кенгуру", "тегло" :60 }

Можем да видим, че документ 1 е непроменен, а полето за име на документ 2 е променено на Fetch , и също така има weight поле е добавено. Документ 3 също има добавено поле за тежест и документ 4 е вмъкнат.

Променете полето/ите на Upsert

Можете да използвате --upsertFields параметър, за да посочите поле, различно от _id да съвпадат. Когато използвате този параметър, предайте полетата като списък, разделен със запетая.

Да предположим, че имаме друг JSON файл, наречен pets2.json който искаме да импортираме, и изглежда така:

{"name":"Wag","type":"Dog","weight":20.0,"gooddog":true}{"name":"Bubbles","type":"Fish"} 

Този документ не включва _id поле, така че ще трябва да съпоставим с други полета, които уникално идентифицират всеки документ. В този случай бихме могли да използваме name и type полета.

Следователно можем да използваме следния mongoimport команда:

mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json 

Сега нека проверим колекцията отново:

db.pets.find() 

Резултат:

{ "_id" :1, "name" :"Wag", "type" :"Dog", "gooddog" :true, "weight" :20 }{ "_id" :2, "name" :" Извличане", "тип" :"Куче", "тегло" :40 }{ "_id" :3, "име" :"Мяу", "тип" :"Котка", "тегло" :10 }{ "_id" :4, "name" :"Hop", "type" :"Kenguroo", "weight" :60 }{ "_id" :ObjectId("5ff0548dd991410169412300"), "name" :"Bubbles", "type" :" Риба" }

Можем да видим, че Wag е актуализиран (но _id стойността остава същата).

Мехурчетата, от друга страна, не съответстваха на полетата за upsert и затова бяха вмъкнати.

Проверете за mongoimport

mongoimport е част от пакета MongoDB Database Tools. Инструментите за база данни на MongoDB са набор от помощни програми от командния ред за работа с MongoDB.

Ако не сте сигурни дали имате MongoDB Database Tools/mongoimport инсталиран, опитайте да изпълните следната команда във вашия терминал или команден ред, за да проверите:

mongoimport --version 

Ако го имате, трябва да видите информация за версията и т.н. Ако го нямате, можете да използвате инструкциите за инсталиране на уебсайта на MongoDB, за да го инсталирате на вашата система.

Къде да изпълнявам командите?

Не забравяйте, че трябва да стартирате mongoimport команди от командния ред на вашата система (например нов прозорец на терминал или команден ред).

Не ги стартирайте от mongo черупка.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. най-добрата практика на обединяването на django + PyMongo?

  2. Как да се присъедините към множество колекции с $lookup в mongodb

  3. mongoexport E QUERY SyntaxError:Неочакван идентификатор

  4. Ефективност на групово вмъкване в MongoDB за големи колекции

  5. Мониторинг и защита на MongoDB с ClusterControl Advisors