sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man exporterar MongoDB-frågeresultat till en CSV-fil

MongoDBs databasverktyg inkluderar ett verktyg som heter mongoexport som gör att du kan exportera MongoDB-data till en CSV- eller JSON-fil.

En av de saker du kan göra med det här verktyget är att exportera frågeresultat. Den här artikeln visar hur du använder mongoexport för att exportera MongoDB-frågeresultat till en CSV-fil.

Syntax

Syntaxen för mongoexport går så här:

mongoexport --collection=<coll> <options> <connection-string>

Du måste köra mongoexport kommandon från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolkfönster).

Kör inte mongoexport kommandon från mongo skal.

Exempel

Följande exempelkod exporterar resultaten av en fråga till en CSV-fil:

mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --query='{ "type": "Dog" }' --out=data/dogs.csv

Detta exporterar en fråga som frågar efter en samling som heter pets i PetHotel databas. Frågan exporteras till en fil som heter dogs.csv i data/ mapp.

Om mappen inte finns skapas den. Samma sak med filen. Detta förutsätter förresten att det inte finns några behörighetsproblem med att skriva en fil till den angivna platsen.

I det här exemplet angav jag inte någon värd, port, autentisering, etc, så den exporterar samlingen från MongoDB-instansen som körs på standardvärdens portnummer 27017 .

Nedan finns en förklaring av parametrarna som vi har tillhandahållit här.

Parameter Beskrivning
--db
eller
-d
Anger databasen som mongoexport ska köras på . I det här fallet kallas databasen PetHotel .
Denna parameter kan alternativt skickas med -d (istället för --db ).
--collection
eller
-c
Anger samlingen vi vill exportera (eller köra frågan mot). I det här fallet kallas samlingen pets .
Denna parameter kan alternativt skickas som -c (istället för --collection ).
--type Anger den exporterade filtypen. I det här fallet anger vi csv för att exportera den till en CSV-fil.
--fields Anger fälten som vi vill exportera. Vi har möjlighet att exportera alla fält eller bara några. Du måste lista var och en här, avgränsade med kommatecken. Vid export till CSV är det ett krav att ange fältnamnen. Du kan göra det via --fields parametern eller --fieldFile parameter (mer om det senare).
--query
eller
-q
Anger frågan för vilka resultat vi vill exportera. Detta måste omges av enkla citattecken (så att det inte interagerar med ditt skal).
Denna parameter kan också skickas med -q .
--out Anger det exporterade filnamnet och var den kommer att finnas. Om du inte anger ett filnamn, mongoexport skriver data till standardutgång (stdout ).

Kontrollera den exporterade filen

Låt oss verifiera att exporten fungerade som förväntat.

Låt oss först köra frågan mot den ursprungliga samlingen.

use PetHotel
db.pets.find({ "type": "Dog" })

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }

Så vi kan se att det finns 4 hundar, alla med samma fält som vi angav i vår exportoperation.

Låt oss nu öppna den exporterade filen dogs.csv för att se vad som finns inuti:

_id,name,type,weight
1,Wag,Dog,20
2,Bark,Dog,10
6,Fetch,Dog,17
7,Jake,Dog,30

OK, så all data finns i den exporterade filen som förväntat.

Exportera färre fält

Du kan ange färre fält med --fields parameter om du vill.

Exempel:

mongoexport --db=PetHotel --collection=pets --type=csv --fields=name,weight --query='{ "type": "Dog" }' --out=data/dogs.csv

Resultatfil:

name,weight
Wag,20
Bark,10
Fetch,17
Jake,30

Ta bort kolumnrubriker

Du kommer att märka att den exporterade filen i de tidigare exemplen inkluderade kolumnrubriker.

Du har också möjlighet att exportera filen utan kolumnrubriker. För att göra detta, använd --noHeaderLine parameter.

Exempel:

mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --query='{ "type": "Dog" }' --noHeaderLine --out=data/dogs.csv

Nu när jag öppnar den exporterade filen finns det inga kolumnrubriker:

1,Wag,Dog,20
2,Bark,Dog,10
6,Fetch,Dog,17
7,Jake,Dog,30

Använd en fil för fältnamnen

Du kan ersätta --field parametern med --fieldFile parameter för att ange namnet på en fil som innehåller fältnamnen som du vill exportera.

mongoexport --db=PetHotel --collection=pets --type=csv --fieldFile=data/dogs_fields.txt --query='{ "type": "Dog" }' --out=data/dogs.csv

Filen som innehåller fälten måste ha fälten listade, ett per rad.

Här är vad dogs_fields.txt filen såg ut som för detta exempel:

name
type
weight

Detta resulterade i att innehållet i den exporterade filen såg ut så här:

name,type,weight
Wag,Dog,20
Bark,Dog,10
Fetch,Dog,17
Jake,Dog,30

Ändra kolumnordningen

Du kan ändra ordningen på fälten för export. De behöver inte vara i samma ordning som det underliggande dokumentet.

Till exempel denna kod:

mongoexport --db=PetHotel --collection=pets --type=csv --fields=type,name,weight,_id --query='{ "type": "Dog" }' --out=data/dogs.csv

Resultat i följande CSV-fil:

type,name,weight,_id
Dog,Wag,20,1
Dog,Bark,10,2
Dog,Fetch,17,6
Dog,Jake,30,7

Åtkomstkontroll/autentisering

Om du inte använder localhost kan du använda --host parameter för att ange värden och --port för att ange porten. Du kan också använda --username parameter för att ange användarnamn och --password till för lösenordet. Om du utelämnar lösenordsparametern kommer du att bli tillfrågad om den. Det finns också en --authenticationDatabase parameter för att ange den autentiseringsdatabasen där användaren har skapats.

Exempel:

mongoexport --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --query='{ "type": "Dog" }' --out=data/dogs.csv

Kontrollera efter mongoexport

mongoexport är en del av MongoDB Database Tools-paketet. MongoDB Database Tools är en uppsättning kommandoradsverktyg för att arbeta med MongoDB.

Om du inte är säker på om du har MongoDB Database Tools/mongoexport installerat, prova att köra följande kommando i din terminal eller kommandotolk för att kontrollera:

mongoexport --version

Om du har det bör du se versionsinformation etc. Om du inte har det kan du använda installationsinstruktionerna på MongoDB-webbplatsen för att installera det på ditt system.

Var kör man kommandona?

Glöm inte att du måste köra mongoexport kommandon från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolksfönster).


  1. Mongoose expires egendom fungerar inte korrekt

  2. Port forwarding med nginx från java

  3. Installera CouchDB på Debian 9

  4. Finns det något som Redis DB, men inte begränsat med RAM-storlek?