sql >> Databáze >  >> NoSQL >> MongoDB

Jak nahradit existující dokumenty při importu souboru do MongoDB

Když použijete mongoimport pro import souborů do MongoDB máte možnost nahradit existující dokumenty, které odpovídají těm, které importujete.

Tím myslím, pokud má importovaný dokument stejné _id hodnotu jako existující v kolekci, do které importujete, stávající dokument bude nahrazen tím, který se importuje.

Můžete také zadat jiné pole (jiné než _id pole), které bude v případě potřeby odpovídajícím polem.

Způsob, jak nahradit existující dokumenty při použití mongoimport je použít upsert režimu.

Příklad

Předpokládejme, že máme sbírku nazvanou pets které obsahují následující dokumenty:

db.pets.find()

Výsledek:

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

A máme následující soubor JSON s názvem pets.json :

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

Následující příkaz importuje soubor JSON do kolekce:

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

Toto používá upsert k nahrazení odpovídajících dokumentů těmi importovanými.

Zkontrolujte výsledky

Pojďme se nyní na kolekci podívat.

db.pets.find()

Výsledek:

{ "_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 }

Vidíme, že dokument 2 byl zcela nahrazen. Pes Bark byl nahrazen psem Fetch a pro Fetch není zaznamenána žádná váha .

Dokument 3 byl také nahrazen a dokument 4 je zcela nový dokument.

Změňte pole/pole Upsert

Můžete použít --upsertFields parametr k určení jiného pole než _id proti kterému zápasit. Při použití tohoto parametru předávejte pole jako seznam oddělený čárkami.

Předpokládejme, že máme další soubor JSON s názvem pets2.json který chceme importovat, a vypadá to takto:

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

Tento dokument neobsahuje _id pole, takže bychom museli porovnávat s jinými poli, která jedinečně identifikují každý dokument. V tomto případě bychom mohli použít name a type pole.

Můžeme tedy použít následující mongoimport příkaz:

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

Nyní znovu zkontrolujeme sbírku:

db.pets.find()

Výsledek:

{ "_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" }

Vidíme, že Fetch byl aktualizován/nahrazen (ale _id hodnota zůstává stejná). To samé se Scratchem.

Bubliny na druhé straně neměly žádnou shodu s horními poli, a proto byly vloženy.

Vyhledejte mongoimport

mongoimport je součástí balíčku databázových nástrojů MongoDB. Databázové nástroje MongoDB jsou sada nástrojů příkazového řádku pro práci s MongoDB.

Pokud si nejste jisti, zda máte MongoDB Database Tools/mongoimport nainstalovaný, zkuste spustit následující příkaz v terminálu nebo příkazovém řádku a zkontrolujte:

mongoimport --version

Pokud ji máte, měli byste vidět informace o verzi atd. Pokud ji nemáte, můžete ji nainstalovat do svého systému pomocí pokynů k instalaci na webu MongoDB.

Kde spustit příkazy?

Nezapomeňte, že musíte spustit mongoimport příkazy z příkazového řádku vašeho systému (např. nový terminál nebo okno příkazového řádku).

Nespouštějte je z mongo skořápka.


  1. Sloučení dvou kolekcí v MongoDB

  2. Co se děje s Meteor and Fibers/bindEnvironment()?

  3. Rychlejší způsob, jak iterovat všechny klíče a hodnoty v redis db

  4. Chyba pole v objektu 'cíl' na poli '':zamítnutá hodnota []; kódy [typeMismatch.target.,typeMismatch.,typeMismatch.java.util.Date,typeMismatch]