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

Как да замените съществуващите документи при импортиране на файл в MongoDB

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

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

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

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

Пример

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

db.pets.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

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

{"_id":2,"name":"Fetch","type":"Dog"}
{"_id":3,"name":"Scratch","type":"Cat","weight":10}
{"_id":4,"name":"Hop","type":"Kangaroo","weight":60}

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

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

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

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

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

db.pets.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog" }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }

Виждаме, че документ 2 е напълно заменен. Кучето Bark е заменен с кучето Fetch и не се записва тегло за Fetch .

Документ 3 също е заменен, а документ 4 е изцяло нов документ.

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

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

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

{"name":"Fetch","type":"Dog","weight":20,"gooddog":true}
{"name":"Scratch","type":"Cat","weight":15}
{"name":"Bubbles","type":"Fish"}

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

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

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

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

db.pets.find()

Резултат:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
{ "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }

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

Мехурчетата, от друга страна, не съответстваха на полетата за 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. Съхранение на null срещу не съхраняване на ключа изобщо в MongoDB

  2. Съхранявайте изображение в MongoDB с помощта на Node.js/Express и Mongoose

  3. Как да ускоря MongoDB Inserts/sec?

  4. Изчислете средната стойност на mongodb документ

  5. Топ 10 функции на MongoDB Atlas