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

Jak sloučit dokumenty při importu souboru do MongoDB

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žít name a type 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.


  1. Spring Data MongoDB vyhledávání s Pipeline agregací

  2. existuje zpětné volání chyby připojení mongoose

  3. Dávkové vložení/aktualizace pomocí Mongoidu?

  4. Percona Live 2017 – rekapitulace několika desítek