MongoDB: En Djupdykning i Vanliga Frågor och Operationer
MongoDB har etablerat sig som en av de mest populära och respekterade NoSQL-databaserna inom professionell utveckling. Dess anpassningsförmåga, förmåga till skalning och hantering av stora datamängder gör den till ett självklart val för moderna applikationer. Denna artikel är din guide till att bemästra de mest grundläggande och viktiga frågorna och operationerna i MongoDB.
Att förvärva en solid förståelse för hur man effektivt hämtar, bearbetar och modellerar data i MongoDB är avgörande för att skapa robusta och snabba applikationer. Vi kommer att utforska hur man skapar databaser, samlingar, infogar och hämtar dokument, filtrerar resultat, sorterar data och mycket mer.
1. Skapa eller Byta Databaser
Genom MongoDB Shell kan du enkelt skapa nya databaser lokalt, särskilt om du använder ett fjärrkluster. Kommandot use
är din nyckel för att initiera en ny databas:
use databas_namn
Detta kommando skapar inte bara en ny databas om den inte finns, utan det används även för att byta till en befintlig databas.
2. Ta Bort Databas
För att radera en databas, börja med att ansluta till den genom att använda use
-kommandot. Därefter kan du enkelt ta bort databasen med dropDatabase()
:
use databas_namn
db.dropDatabase()
3. Skapa en Samling
När du väl har valt databasen, kan du skapa en samling med hjälp av createCollection()
. Tänk på samlingar som tabeller i en traditionell relationsdatabas:
db.createCollection("samling_namn")
Ersätt ”samling_namn” med det namn du önskar.
4. Infoga Dokument i en Samling
Du kan lägga till data i en samling genom att infoga antingen ett enda dokument eller flera dokument samtidigt.
För att infoga ett enstaka dokument används insertOne()
:
db.samling_namn.insertOne({"Namn":"Anna", "Intressen":"Böcker"})
Samma metod kan användas för att infoga flera dokument, om du vill ange egna id:
db.samling_namn.insertOne([{"Namn":"Anna", "Intressen":"Böcker"}, {"Språk": "Mongo", "admin": true}])
Om du vill infoga flera dokument med separata ID, använd insertMany()
:
db.samling_namn.insertMany([{"Namn":"Anna", "Intressen":"Böcker"}, {"Namn": "Erik", "Intressen": "Spel"}])
5. Hämta Alla Dokument från en Samling
För att hämta alla dokument från en specifik samling, använd find()
:
db.samling_namn.find()
Detta kommando returnerar alla dokument i samlingen.
Om du bara vill hämta ett visst antal dokument, kan du använda limit()
. Till exempel, för att hämta de två första dokumenten:
db.samling_namn.find().limit(2)
6. Filtrera Dokument i en Samling
MongoDB erbjuder flera sätt att filtrera dokument. Låt oss betrakta ett exempel:
För att söka efter dokument baserat på ett specifikt fält, använd:
db.samling_namn.find({"Intressen":"Spel"}, {"_id":0, "Namn":1})
Detta kommando returnerar alla dokument där värdet för fältet ”Intressen” är ”Spel”, men visar endast namnen och utesluter dokumentens ID.
Du kan även filtrera baserat på numeriska värden. Om du t.ex. vill hitta alla användare som är äldre än 25, använd operatorn $gt
(greater than):
db.samling_namn.find({"Intressen":"Böcker", "Ålder":{"$gt":25}}, {"_id":0, "Namn":1})
Resultatet skulle visa namnen på de användare som gillar böcker och är äldre än 25.
Prova att ersätta find
med findOne
för att se skillnaden. Här är några andra filtreringsoperatorer:
$lt
: Alla värden mindre än det angivna.$gte
: Värden lika med eller större än det angivna.$lte
: Värden som är mindre än eller lika med det definierade.$eq
: Får alla värden lika med det angivna.$ne
: Alla värden är inte lika med det angivna.$in
: Använd detta när du frågar baserat på en array. Den får alla värden som matchar något av objekten i arrayen.$nin
gör tvärtom.
7. Sortera Frågor
Sortering hjälper till att presentera dina resultat i en bestämd ordning, antingen stigande eller fallande. För att sortera krävs en numerisk referens. För att sortera i stigande ordning, t.ex. efter ålder:
db.samling_namn.find({"Intressen":"Böcker"}).sort({"Ålder":1})
Om du vill sortera i fallande ordning, ändra ”1” till ”-1”:
db.samling_namn.find({"Intressen":"Böcker"}).sort({"Ålder":-1})
8. Uppdatera ett Dokument
MongoDB-uppdateringar kräver atomära operatorer för att definiera hur uppdateringen ska utföras. Här är några av de vanligaste:
$set
: Lägg till ett nytt fält eller ändra ett befintligt.$push
: Infoga ett nytt objekt i en array. Kombinera med$each
för att infoga flera objekt.$pull
: Ta bort ett objekt från en array. Använd med$in
för att ta bort flera objekt.$unset
: Ta bort ett fält från ett dokument.
För att uppdatera ett dokument och lägga till ett nytt fält, till exempel:
db.samling_namn.updateOne({"Namn":"Lisa"}, {"$set":{"Namn":"Louise", "epost":"[email protected]"}})
Detta kommando uppdaterar det angivna dokumentet med det nya namnet och den nya e-postadressen.
För att ta bort e-postfältet kan du använda $unset
:
db.samling_namn.updateOne({"Namn":"Lisa"}, {"$unset":{"epost":"[email protected]"}})
Tänk på följande exempeldata:
För att lägga till ett objekt i array-fältet ”varor”, använd $push
:
db.samling_namn.updateOne({"Namn":"Olle"}, {"$push":{"varor":"Äpple"}})
Resultatet blir att ”Äpple” läggs till i Olles ”varor”-lista.
För att lägga till flera objekt samtidigt, använd $each
:
db.samling_namn.updateOne({"Namn":"Olle"}, {"$push":{"varor": {"$each":["Banan", "Apelsin"]}}})
Nu har Olle flera nya varor i sin lista.
För att ta bort ett objekt från en array, använd $pull
:
db.samling_namn.updateOne({"Namn":"Olle"}, {"$pull":{"varor":"Äpple"}})
Olle har nu tagit bort ”Äpple” från sin lista.
För att ta bort flera objekt samtidigt, använd $in
:
db.samling_namn.updateOne({"Namn":"Olle"}, {"$pull":{"varor": {"$in":["Banan", "Apelsin"]} }})
9. Ta Bort ett Dokument eller ett Fält
Med deleteOne
eller deleteMany
kan du ta bort dokument från en samling. Använd deleteOne
för att ta bort ett dokument baserat på ett specifikt fält:
db.samling_namn.deleteOne({"Namn":"NyAnvändare"})
För att ta bort flera dokument med gemensamma egenskaper, använd deleteMany
. Till exempel, ta bort alla dokument där ”Intressen” är ”Schack”:
db.samling.deleteMany({"Intressen":"Schack"})
10. Indexering
Indexering förbättrar prestandan genom att minska antalet dokument som MongoDB måste skanna vid en sökning. Det är bra att skapa index för fält du ofta söker på.
MongoDB-index fungerar på samma sätt som index i SQL-databaser. För att skapa ett stigande index på fältet ”Namn”, använd:
db.samling.createIndex({"Namn":1})
För att se en lista över dina index, använd:
db.samling.getIndexes()
Detta är bara en introduktion, det finns fler sätt att skapa index i MongoDB.
11. Aggregering
Aggregationspipelinen, en förbättring av MapReduce, låter dig utföra och lagra komplexa beräkningar direkt i MongoDB. Till skillnad från MapReduce som kräver separata JavaScript-funktioner, använder aggregering enklare, inbyggda MongoDB-metoder.
Betrakta följande försäljningsdata:
Med MongoDB-aggregering kan du räkna ut den totala mängden sålda varor för varje kategori:
db.forsaljning.aggregate([{$group:{"_id":"$Avdelning", "totaltSold":{$sum:"$Antal"}}}, {$project:{"_id":0, "totaltSold":1, "Avdelning":"$_id"}}])
Detta resulterar i en översikt över hur mycket som sålts för varje avdelning.
Bemästra MongoDB-frågor
MongoDB erbjuder ett stort utbud av frågefunktioner och metoder för att förbättra prestanda. Oavsett vilket programmeringsspråk du använder, är de grundläggande strukturerna vi täckt avgörande för att interagera med en MongoDB-databas.
Det kan dock finnas vissa skillnader i syntax beroende på vilket programmeringsspråk du använder. Till exempel, Python känner ofta igen ”snake_case” medan JavaScript föredrar ”camelCase”. Se därför till att undersöka vad som fungerar bäst för din valda teknik.