Když použijete mongoimport
pro import souborů do MongoDB máte možnost sloučit existující dokumenty s těmi, které importujete.
V tomto případě, pokud má importovaný dokument stejné _id
hodnotu jako existující v kolekci, do které importujete, bude existující dokument sloučen s 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.
Když sloučíte dokumenty, výsledný dokument zkombinuje existující data se všemi novými daty, která jsou v importovaném souboru. Všechna data, která jsou stejná, zůstanou stejná. Jakákoli konfliktní data způsobí, že data importovaného souboru přepíší existující data. Pokud importovaný dokument neobsahuje pole, které je v odpovídajícím dokumentu v kolekci MongoDB, zůstane toto pole v kolekci nezměněno (tj. nebude odstraněno ani změněno).
Způsob, jak sloučit dokumenty pomocí mongoimport
je použít merge
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" :"Pes" }{ "_id" :2, "name" :"Brk", "type" :"Pes" }{ "_id" :3, "name" :"Mňau", "type" :"Kočka" }
A máme následující soubor JSON s názvem pets.json
:
{"_id":2.0,"name":"Aport","type":"Pes","weight":40.0}{"_id":3.0,"weight":10.0}{"_id":4.0,"name":"Hop","type":"Klokánek","váha":60.0}
Následující příkaz importuje soubor JSON do kolekce:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json
Toto používá merge
režimu pro sloučení odpovídajících dokumentů s importovanými.
Zkontrolujte výsledky
Pojďme se nyní na kolekci podívat.
db.pets.find()
Výsledek:
{ "_id" :1, "name" :"Wag", "type" :"Pes" }{ "_id" :2, "name" :"Aport", "type" :"Pes", " váha" :40 }{ "_id" :3, "jméno" :"Mňau", "typ" :"Kočka", "váha" :10 }{ "_id" :4, "jméno" :"Hop", " typ" :"Klokánek", "váha":60 }
Vidíme, že dokument 1 se nezměnil, pole názvu dokumentu 2 bylo změněno na Fetch
a má také weight
pole přidáno. Do dokumentu 3 bylo také přidáno pole hmotnosti a dokument 4 byl vložen.
Změňte pole/pole Upsert
Můžete použít --upsertFields
parametr k určení jiného pole než _id
zápasit proti. 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":"Wag","type":"Pes","weight":20.0,"gooddog":true}{"name":"Bubbles","type":"Ryby"}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žítname
atype
pole.Můžeme tedy použít následující
mongoimport
příkaz:mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json
Nyní znovu zkontrolujeme sbírku:
db.pets.find()
Výsledek:
{ "_id" :1, "name" :"Wag", "type" :"Pes", "gooddog" :true, "weight" :20 }{ "_id" :2, "name" :" Fetch", "type" :"Pes", "weight" :40 }{ "_id" :3, "name" :"Mňau", "type" :"Kočka", "váha" :10 }{ "_id" :4, "name" :"Hop", "type" :"Klokánek", "váha" :60 }{ "_id" :ObjectId("5ff0548dd991410169412300"), "name" :"Bubbles", "type" :" Ryby" }Vidíme, že Wag byl aktualizován (ale
_id
hodnota zůstává stejná).Na druhé straně bubliny 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.