sql >> Database teknologi >  >> NoSQL >> MongoDB

Sådan erstatter du eksisterende dokumenter, når du importerer en fil til MongoDB

Når du bruger mongoimport for at importere filer til MongoDB, har du mulighed for at erstatte eksisterende dokumenter, der matcher dem, du importerer.

Med dette mener jeg, hvis et importeret dokument har samme _id værdi som en eksisterende i den samling, du importerer til, vil det eksisterende dokument blive erstattet med det, der importeres.

Du kan også angive et andet felt (andre end _id). felt) for at være det matchende felt, hvis det kræves.

Måden at erstatte eksisterende dokumenter, når du bruger mongoimport er at bruge upsert tilstand.

Eksempel

Antag, at vi har en samling kaldet pets der indeholder følgende dokumenter:

db.pets.find()

Resultat:

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

Og vi har følgende JSON-fil kaldet pets.json :

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

Følgende kommando importerer JSON-filen til samlingen:

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

Dette bruger upsert tilstand for at erstatte matchende dokumenter med de importerede.

Tjek resultaterne

Lad os tage et kig på kollektionen nu.

db.pets.find()

Resultat:

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

Vi kan se, at dokument 2 er blevet fuldstændig erstattet. Hunden Bark er blevet erstattet med hunden Fetch , og der registreres ingen vægt for Fetch .

Dokument 3 er også blevet erstattet, og dokument 4 er et helt nyt dokument.

Skift Upsert Field/s

Du kan bruge --upsertFields parameter for at angive et andet felt end _id som man kan matche mod. Når du bruger denne parameter, skal du sende felterne som en kommasepareret liste.

Antag, at vi har en anden JSON-fil kaldet pets2.json som vi vil importere, og det ser sådan ud:

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

Dette dokument inkluderer ikke _id felt, så vi bliver nødt til at matche med andre felter, der entydigt identificerer hvert dokument. I dette tilfælde kunne vi bruge name og type felter.

Vi kan derfor bruge følgende mongoimport kommando:

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

Lad os nu tjekke samlingen igen:

db.pets.find()

Resultat:

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

Vi kan se, at Fetch er blevet opdateret/erstattet (men _id værdien forbliver den samme). Det samme med Scratch.

Bubbles på den anden side havde ingen match til upsert-felterne og blev derfor indsat.

Se efter mongoimport

mongoimport er en del af MongoDB Database Tools-pakken. MongoDB-databaseværktøjerne er en række kommandolinjeværktøjer til at arbejde med MongoDB.

Hvis du ikke er sikker på, om du har MongoDB Database Tools/mongoimport installeret, prøv at køre følgende kommando i din terminal eller kommandoprompt for at kontrollere:

mongoimport --version

Hvis du har det, bør du se versionsoplysninger osv. Hvis du ikke har det, kan du bruge installationsinstruktionerne på MongoDB-webstedet til at installere det på dit system.

Hvor skal kommandoerne køres?

Glem ikke, du skal køre mongoimport kommandoer fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue).

Kør dem ikke fra mongo skal.


  1. Hvordan skifter man et boolesk felt i ét dokument med atomar drift?

  2. Redis nøglerumshændelse udløses ikke

  3. MongoDB Schema Planlægningstips

  4. MongoDB konverterer dato til streng