Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Datenbank und Entwicklung Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Dieser Artikel befasst sich mit den häufig verwendeten Abfragen und Befehlen von MongoDB die von Entwicklern und DBA im täglichen Entwicklungs- und Betriebsleben verwendet werden.

Kurzes Intro

In dieser neuen Ära der intelligenten Technologie werden Daten in großem Umfang generiert, und jeder Teil der Daten ist für wachsende Branchen gleichermaßen wichtig. Die Benutzer erzeugen strukturierte, halbstrukturierte und unstrukturierte Daten in unbegrenzter Menge. Strukturierte Daten umfassen die Speicherung von Daten in Tabellen und Zeilen, während unstrukturierte Daten aus Bildern, Videos und Sprachclips bestehen. Aufgrund des wachsenden Datenvolumens an strukturierten und unstrukturierten Daten besteht die Notwendigkeit von NoSQL-Datenbank kommt ins Spiel.

Es erleichtert Entwicklern die Erstellung von Schemata und bietet Datenbankadministratoren eine skalierbare, sichere und schnelle Plattform.

Was ist MongoDB?

MongoDB ist eine dokumentenorientierte, plattformübergreifende und quelloffene NoSQL-Datenbank für die Speicherung halbstrukturierter Daten, die in C++ geschrieben wurde. Anstelle von Tabellen und Zeilen speichert MongoDB Daten in Schlüssel-Wert-Paaren. Um Entwicklern und Administratoren das Lernen zu erleichtern, finden Sie hier einige der häufig verwendeten MongoDB-Befehle.

Fangen wir an.

Grundlegende Befehle

1. Versionskontrolle

Der erste Befehl dient dazu, die installierte Version des MongoDB-Servers und der Mongo Shell zu überprüfen. Führen Sie diesen Befehl über das Terminal unter Linux oder die CMD-Eingabeaufforderung unter Windows aus.

mongod --version

C:\Windows\System32>mongod --version
db version v4.2.7
git version: 51d9fe12b5d19720e72dcd7db0f2f17dd9a19212
allocator: tcmalloc
modules: none
build environment:
    distmod: 2012plus
    distarch: x86_64
    target_arch: x86_64

Wir können auch verwenden mongod um die Version zu prüfen, wie folgt.

mongo –version

C:\Windows\System32>mongo --version
MongoDB shell version v4.2.7
git version: 51d9fe12b5d19720e72dcd7db0f2f17dd9a19212
allocator: tcmalloc
modules: none
build environment:
    distmod: 2012plus
    distarch: x86_64
    target_arch: x86_64

2. Auflisten von MongoDB-Befehlen

Dieser Befehl hilft den Benutzern, alle Befehle herauszufinden, die in MongoDB verwendet werden können. Führen Sie den Befehl in der Mongo Shell aus.

help()

mongo> db.help()
DB methods:
        db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [just calls db.runCommand(...)]
        db.aggregate([pipeline], {options}) - performs a collectionless aggregation on this database; returns a cursor
        db.auth(username, password)
        db.cloneDatabase(fromhost) - will only function with MongoDB 4.0 and below
        db.commandHelp(name) returns the help for the command
        db.copyDatabase(fromdb, todb, fromhost) - will only function with MongoDB 4.0 and below
        db.createCollection(name, {size: ..., capped: ..., max: ...})
        db.createUser(userDocument)
        db.createView(name, viewOn, [{$operator: {...}}, ...], {viewOptions})
        db.currentOp() displays currently executing operations in the db
        db.dropDatabase(writeConcern)
        db.dropUser(username)
        db.eval() - deprecated
        db.fsyncLock() flush data to disk and lock server for backups
        db.fsyncUnlock() unlocks server following a db.fsyncLock()
        db.getCollection(cname) same as db['cname'] or db.cname
        db.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collections
        db.getCollectionNames()
        db.getLastError() - just returns the err msg string
        db.getLastErrorObj() - return full status object
        db.getLogComponents()
        db.getMongo() get the server connection object
        db.getMongo().setSlaveOk() allow queries on a replication slave server
        db.getName()
        db.getProfilingLevel() - deprecated
        db.getProfilingStatus() - returns if profiling is on and slow threshold
        db.getReplicationInfo()
        db.getSiblingDB(name) get the db at the same server as this one
        db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set
        db.hostInfo() get details about the server's host
        db.isMaster() check replica primary status
        db.killOp(opid) kills the current operation in the db
        db.listCommands() lists all the db commands
        db.loadServerScripts() loads all the scripts in db.system.js
        db.logout()
        db.printCollectionStats()
        db.printReplicationInfo()
        db.printShardingStatus()
        db.printSlaveReplicationInfo()
        db.resetError()
        db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into {cmdObj: 1}
        db.serverStatus()
        db.setLogLevel(level,<component>)
        db.setProfilingLevel(level,slowms) 0=off 1=slow 2=all
        db.setVerboseShell(flag) display extra information in shell output
        db.setWriteConcern(<write concern doc>) - sets the write concern for writes to the db
        db.shutdownServer()
        db.stats()
        db.unsetWriteConcern(<write concern doc>) - unsets the write concern for writes to the db
        db.version() current version of the server
        db.watch() - opens a change stream cursor for a database to report on all  changes to its non-system collections.

3. DB-Statistiken

Der unten stehende Befehl gibt Details zu den Datenbanken zusammen mit verschiedenen Sammlungen und zugehörigen Parametern dieser Datenbank an.

db.stats()

> db.stats()
{
        "db" : "test",
        "collections" : 0,
        "views" : 0,
        "objects" : 0,
        "avgObjSize" : 0,
        "dataSize" : 0,
        "storageSize" : 0,
        "numExtents" : 0,
        "indexes" : 0,
        "indexSize" : 0,
        "scaleFactor" : 1,
        "fileSize" : 0,
        "fsUsedSize" : 0,
        "fsTotalSize" : 0,
        "ok" : 1
}

4. Neue DB erstellen oder zu bestehender DB wechseln

Dieser einfache Befehl hilft, eine neue Datenbank zu erstellen, wenn sie nicht existiert, oder zu einer bestehenden Datenbank zu wechseln. In MongoDB ist "test" die Standarddatenbank, daher verwenden Benutzer "Test" DB, sobald Mongo Shell eingeloggt ist.

use DB_Name

mongos> use geekFlareDB
switched to db geekFlareDB

5. Auflistung aller Datenbanken

Der genannte Befehl wird verwendet, um alle Datenbanken aufzulisten.

show dbs

mongo> show dbs
admin        0.000GB
config       0.002GB
geekFlareDB  0.000GB
test         0.000GB

6. Prüfen Sie den aktuell verwendeten DB

Führen Sie den folgenden Befehl in der Mongo Shell aus, um die derzeit verwendete DB anzuzeigen.

db

> db
GeekFlare

 7. Datenbank löschen

Der angegebene Befehl hilft dem Benutzer, die gewünschte Datenbank zu löschen. Führen Sie den Befehl auf dem MongoDB-Client aus. Bitte stellen Sie sicher, dass Sie die Datenbank auswählen, bevor Sie den Drop-Befehl ausführen. Andernfalls wird die Standarddatenbank "Test" Datenbank.

db.dropDatabase()

Lassen Sie uns zunächst alle Datenbanken auflisten, zu einer von ihnen wechseln und sie dann löschen

> show dbs
admin     0.000GB
config    0.001GB
local     0.000GB
test      0.000GB
training  0.000GB
>
> use training
switched to db training
>
> db.dropDatabase()
{ "dropped" : "training", "ok" : 1 }

8. Sammlung erstellen

Collections sind ähnlich wie Tabellen in RDBMS.

Der Befehl zum Erstellen einer Sammlung besteht aus zwei Parametern. Die Sammlung besteht aus null oder mehr Dokumenten. Der obligatorische Parameter für die Erstellung einer Sammlung ist daher ihr Name und optionaler Parameter kann den Namen des Dokuments, seine Größe und den Index enthalten.

  • Erstellen einer einfachen Sammlung.

Syntax: db.createCollection(Name,Options)

Beispiel:

> use geekFlare
switched to db geekFlare
>
> db.createCollection("geekFlareCollection")
{ "ok" : 1 }
>
> show collections
geekFlareCollection
  • Erstellen einer Capped Collection

Schränken Sie dabei die Größe und Anzahl der Dokumente ein, die in die Sammlung eingefügt werden sollen. Die "capped collection" hat die Eigenschaft, die ältesten Dokumente zu entfernen, um Platz für neue Dokumente zu schaffen.

Syntax:

db.createCollection(Name,{capped : true, size : sizeLimit , max : documentLimit })

Beispiel: Erstellen wir eine Capped Collection, fügen wir einen Datensatz ein und rufen wir ihn ab

> db.createCollection("Login",{capped:true,max:1,size:200})
{ "ok" : 1 }
>
> db.Login.insertMany([{"id":1,status:"Active"},{"id":2,status:"Hold"},{"id":3,status:"Pending"}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5edc5f4f411247725e75e52e"),
                ObjectId("5edc5f4f411247725e75e52f"),
                ObjectId("5edc5f4f411247725e75e530")
        ]
}
>
> db.Login.find()
{ "_id" : ObjectId("5edc5f4f411247725e75e530"), "id" : 3, "status" : "Pending" }

9. Tropfenabholung

Der Befehl Drop Collection ist ähnlich wie DDL in RDBMS. Er erwirbt Sperren für die gewünschte Sammlung bis zur Ausführung des Befehls. Drop Collection entfernt die Sammlung aus der DB zusammen mit allen Indizes, die mit dieser Sammlung verbunden sind. Um die Sammlung zu löschen, ist die Methode drop() erforderlich.

Bei erfolgreicher Übergabe wird true zurückgegeben, im Falle eines Fehlers oder wenn die DB nicht existiert, false.

Syntax: collectionName.drop()

Beispiel:

> use geekFlare
switched to db geekFlare
>
> show collections
geekFlareCollection
>
> db.geekFlareCollection.drop()
true
>
> db.geekFlareCollection.drop()
false

CRUD-Vorgänge bezogen

10. Dokument in Sammlung einfügen

In MongoDB entspricht ein Dokument einem Tupel in einem RDBMS.

Um ein Dokument zu erstellen, muss der insert() Methode verwendet wird. Die Methode insert() erstellt ein oder mehrere Dokumente in der bestehenden Sammlung. Sie erstellt auch eine Sammlung, wenn diese nicht in der DB vorhanden ist. In MongoDB ist das Dokument schema-los, d.h. es gibt keine Beschränkung beim Einfügen einer beliebigen Anzahl von Schlüsseln in ein Dokument.

  • Einfügen eines einzelnen Datensatzes

So fügen Sie einen Datensatz ein insert() oder insertOne() Methode verwendet werden kann.

Syntax: collectionName.insertOne({document})

Beispiel:

> db.geekFlareCollection.insertOne( {
 code: "P123", Qty: 200, status: "Active"
});
{
        "acknowledged" : true,
        "insertedId" : ObjectId("5ed309725429283aee2e134d")
}
  • Einfügen mehrerer Datensätze

Um viele Datensätze einzufügen, wird eine Liste von Datensätzen an insert() oder insertMany() Methode.

Syntax:

collectionName.insertMany([{document1},{document2},{ document3}….{ documentn}])

Beispiel:

db.geekFlareCollection.insertMany([
... { code: "P1", Qty: 100, status: "Active"},
... { code: "P2", Qty: 200, status: "Active"},
... { code: "P3", Qty: 0, status: "Dective"}
... ]);
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("5edf7b4e18b2c26b9dfe8cac"),
                ObjectId("5edf7b4e18b2c26b9dfe8cad"),
                ObjectId("5edf7b4e18b2c26b9dfe8cae")
        ]
}
> db.geekFlareCollection.find()
{ "_id" : ObjectId("5edf546fdfa12b33b7cb75b8"), "product" : "bottles", "Qty" : 100 }
{ "_id" : ObjectId("5edf546fdfa12b33b7cb75b9"), "product" : "bread", "Qty" : 20 }
{ "_id" : ObjectId("5edf546fdfa12b33b7cb75ba"), "product" : "yogurt", "Qty" : 30 }
{ "_id" : ObjectId("5edf7b4e18b2c26b9dfe8cac"), "code" : "P1", "Qty" : 100, "status" : "Active" }
{ "_id" : ObjectId("5edf7b4e18b2c26b9dfe8cad"), "code" : "P2", "Qty" : 200, "status" : "Active" }
{ "_id" : ObjectId("5edf7b4e18b2c26b9dfe8cae"), "code" : "P3", "Qty" : 0, "status" : "Dective" }
>
  • Datensatz in großen Mengen einfügen

Eine große Anzahl von Dokumenten kann auch geordnet und ungeordnet eingefügt werden, indem man initializeOrderedBulkOp() und initializeUnorderedBulkOp() Methoden.

Syntax:

var bulk = db.collectionName.initializeUnorderedBulkOp();

bulk.insert({document1} );

bulk.insert({document2} );

bulk.insert({documentn} );

bulk.execute();

Beispiel:

> var bulk = db.geekFlareCollection.initializeUnorderedBulkOp();
> bulk.insert({ code: "P1", Qty: 100, status: "Active"});
> bulk.insert({ code: "P2", Qty: 200, status: "Active"});
> bulk.insert({ code: "P3", Qty: 0, status: "Dective"});
> bulk.execute();
BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 3,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})
> db.geekFlareCollection.find()
{ "_id" : ObjectId("5edf7be318b2c26b9dfe8caf"), "code" : "P1", "Qty" : 100, "status" : "Active" }
{ "_id" : ObjectId("5edf7be318b2c26b9dfe8cb0"), "code" : "P2", "Qty" : 200, "status" : "Active" }
{ "_id" : ObjectId("5edf7be318b2c26b9dfe8cb1"), "code" : "P3", "Qty" : 0, "status" : "Dective" }
>

11. Dokument aus einer Sammlung abrufen

Für die Suche nach einem Dokument, das in einer Sammlung gespeichert ist, kann die find()-Methode verwendet werden. Der folgende Befehl wird verwendet, um alle Dokumente aus der Sammlung abzurufen.

  • find()Methode kann verwendet werden, um alle in einer Sammlung gespeicherten Dokumente abzurufen.

Syntax: collectionName.find()

Beispiel:

> db.geekFlareCollection.find()
{ "_id" : ObjectId("5ed31186b6f2c2bb1edb86ce"), "code" : "P1", "Qty" : 200, "status" : "Active" }
{ "_id" : ObjectId("5ed31186b6f2c2bb1edb86cf"), "code" : "P2", "Qty" : 200, "status" : "Active" }
{ "_id" : ObjectId("5ed31186b6f2c2bb1edb86d0"), "code" : "P3", "Qty" : 200, "status" : "Active" }
{ "_id" : ObjectId("5ed3159eb6f2c2bb1edb86d1"), "code" : "P4", "Qty" : 100, "status" : "Inactive" }
  • find({condition}) Methode kann verwendet werden, um nur die erforderlichen Dokumente auf der Grundlage einiger Bedingungen aus der Sammlung abzurufen. MongoDB bietet eine Liste von Projektion und Abfrageoperatoren um den Wert des BSON-Typs abzurufen.

Syntax: collectionName.find({ condition })

Beispiel:

> db.geekFlareCollection.find({ Qty: { $eq: 100 }});
{ "_id" : ObjectId("5ed3159eb6f2c2bb1edb86d1"), "code" : "P4", "Qty" : 100, "status" : "Inactive" }
  • Um nur ein Dokument abzurufen, bietet MongoDB die findOne()-Methode. Sie liefert eine formatierte Ausgabe.

Syntax: collectionName.findOne()

Beispiel:

> db.geekFlareCollection.findOne();
{ 
	"_id" : ObjectId("5ed31186b6f2c2bb1edb86ce"), 
        "code" : "P1",
	"Qty" : 200, 
	"status" : "Inactive" 
}

12. Retrieval-Ausgabe verschönern

Die find() Methode ergibt eine ungeordnete Ausgabe. MongoDB bietet pretty() Befehle, um die formatierte Ausgabe zu erhalten.

Syntax: collectionName.find().pretty()

Beispiel:

> db.geekFlareCollection.find({ Qty: { $eq: 100 }}).pretty();
{
        "_id" : ObjectId("5ed3159eb6f2c2bb1edb86d1"),
        "code" : "P4",
        "Qty" : 100,
        "status" : "Inactive"
}

13. Dokument in einer Sammlung aktualisieren

MongoDB bietet update() Methode, um neue Werte für vorhandene Schlüssel in Dokumenten zu setzen. Der Aktualisierungsbefehl gibt Details über geänderte und übereinstimmende Dokumente an. Die Syntax des Update-Befehls lautet:

Syntax: collectionName.update({KeyToUpdate},{Set Command})

Beispiel:

> db.geekFlareCollection.find()
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfb"), "product" : "bottles", "Qty" : 100 }
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfc"), "product" : "bread", "Qty" : 20 }
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfd"), "product" : "yogurt", "Qty" : 30 }
>
> db.geekFlareCollection.update({"product" : "bottles"},{$set : {"Qty": 10}}  )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
> db.geekFlareCollection.find()
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfb"), "product" : "bottles", "Qty" : 10 }
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfc"), "product" : "bread", "Qty" : 20 }
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfd"), "product" : "yogurt", "Qty" : 30 }
>
>  db.geekFlareCollection.find()
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfb"), "product" : "bottles", "Qty" : 10 }
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfc"), "product" : "bread", "Qty" : 20 }
{ "_id" : ObjectId("5edf3f67d6bfbd8125f58cfd"), "product" : "yogurt", "Qty" : 30 }
  • updateOne() : Um ein einzelnes Dokument zu aktualisieren, gibt es updateOne() Methode. updateOne() gibt die Anzahl der übereinstimmenden und geänderten Dokumente an.

Syntax: collectionName.updateOne({SingleKeyToUpdate},{Set Command})

Beispiel:

> db.geekFlareCollection.updateOne({"product" : "bottles"},{$set : {"Qty": 40}}  )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
  • <strong>updateMany()</strong> : Um mehrere Dokumente unter bestimmten Bedingungen zu aktualisieren, hat MongoDB updateMany() Methode.

Syntax: collectionName.updateMany({filter},{Set Command})

Beispiel:

> db.geekFlareCollection.updateMany( { "Qty" : { $lt: 30 } },{ $set: { "Qty": "Inactive"} } )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

14. Dokument einer Sammlung löschen

Um das Dokument zu löschen, besteht MongoDB aus deleteOne() und deleteMany() Methoden. Die Syntax der Löschmethoden sind:

  • <strong>deleteOne({Bedingung}) </strong>entfernt das einzige Dokument, das die Löschkriterien erfüllt.

 Syntax: collectionName.deleteOne({DeletionCondition})

Beispiel:

> db.geekFlareCollection.deleteOne({"product" : "bread"})
{ "acknowledged" : true, "deletedCount" : 1 }
  • <strong>deleteMany() </strong>entfernt alle Dokumente, die den Löschkriterien entsprechen. Ohne die Löschkriterien deleteMany({condition}) löscht alle Dokumente.

 Syntax: collectionName.deleteMany({DeletionCondition})

Beispiel:

> db.geekFlareCollection.deleteMany({"product" : "bottles"})
{ "acknowledged" : true, "deletedCount" : 2 }
  • <strong>entfernen() </strong>Es gibt eine weitere Methode, um alle Dokumente zu löschen, die den Löschkriterien entsprechen. Die Methode remove() benötigt zwei Argumente, eines ist die Löschbedingung und das andere ist nur ein Flag.

        Hinweis: Die Remove-Methode wird in den kommenden Versionen veraltet sein.

Syntax: collectionName.remove({DeletionCondition},1)

Beispiel:

> db.geekFlareCollection.remove({"product" : "bottles"})
WriteResult({ "nRemoved" : 1 })

15. Unterscheidbarkeit abrufen

Die distinct() Methode wird verwendet, um eindeutige Datensätze zu erhalten.

  • Um verschiedene Datensätze aus einem Feld zu erhalten.

Syntax: collectionName.distinct(field)

Beispiel:

> db.geekFlareCollection.distinct("product")
[ "Cheese", "Snacks2", "Snacks3", "bread", "ketchup" ]
  • Um eindeutige Datensätze aus einem Feld zu erhalten, während die Abfrage angegeben wird.

Syntax: collectionName.distinct(field,query)

Beispiel:

> db.geekFlareCollection.distinct('product',{"Qty":20})
[ "Snacks3", "bread" ]

16. Sammlung umbenennen

MongoDB bietet renameCollection () Methode zum Umbenennen der Sammlung.

Syntax: collectionName.renameCollection(newCollectionName)

Beispiel:

>db.geekFlareCollection.renameCollection('geekFlareCol')
{ "ok" : 1 }
> show collections
geekFlareCol

Indizierung

17. Index auf Dokument erstellen

Indizes sind eine spezielle Datenstruktur, die einen kleinen Teil des Datensatzes der Sammlung in einer leicht zu durchsuchenden Form speichert. Indizes unterstützen die auf- und absteigende Reihenfolge der Feldwerte und ermöglichen so eine bessere Leistung beim Abruf.

MongoDB bietet die default_id Index. Außerdem unterstützt MongoDB die Erstellung von benutzerdefinierten Indizes. MongoDB-Indizes werden auf Sammlungsebene definiert und bieten Unterstützung für Felder oder Unterfelder eines Dokuments. Die Syntax für die Erstellung eines Indexes ist :

  • Erstellen Sie einen Index für ein einzelnes Feld.

Syntax: collectionName.createIndex({Key:1})

Dabei gibt der Schlüssel das Feld an, für das der Index erstellt wird, und 1 steht für aufsteigende Reihenfolge. Um einen Index in absteigender Reihenfolge zu erstellen, kann -1 verwendet werden.

Beispiel:

> db.geekFlareCollection.createIndex({"product" : 1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}
  • Erstellen Sie einen Index für mehrere Felder.

Syntax: collectionName.createIndex({Key1:1,key2:1…keyn:1})

Beispiel:

> db.geekFlareCollection.createIndex({"product" : 1,"Qty":-1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}

 18. Index auf Dokument anzeigen

MongoDB bietet getIndexes() Methode, um alle Indizes aufzulisten, die für ein Dokument erstellt wurden.

Syntax: collectionName.getIndexes()

Beispiel:

> db.geekFlareCollection.getIndexes()
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "geekFlareCollection.geekFlareCollection"
        }
]

19. Index aus dem Dokument entfernen

dropIndex() Methode wird verwendet, um einen einzelnen Index zu löschen, und die dropIndexes() Methode wird verwendet, um mehrere Indizes zu löschen.

  • Einzelnen Index entfernen

Syntax: collectionName.dropIndex({key})

Beispiel:

> db.geekFlareCollection.dropIndex({"product" : 1})
{ "nIndexesWas" : 3, "ok" : 1 }
  • Mehrere Indizes entfernen.

Syntax: collectionName.dropIndexes({key1,key2…,keyN})

Beispiel:

> db.geekFlareCollection.dropIndexes({"product" : 1,"Qty":-1})
{ "nIndexesWas" : 3, "ok" : 1 }

Abrufbezogen

20. Begrenzung des Abrufs von Dokumenten

limit() Methode hilft, die Anzahl der zurückgegebenen Dokumente zu begrenzen. Die Methode limit() nimmt numerische Argumente entgegen.

Syntax: collectionName.find().limit(number)

Beispiel:

> db.geekFlareCollection.find().limit(2)
{ "_id" : ObjectId("5ed3c9e7b6f2c2bb1edb8702"), "product" : "bottles", "Qty" : 100 }
{ "_id" : ObjectId("5ed3c9e7b6f2c2bb1edb8703"), "product" : "bread", "Qty" : 20 }

21. Abrufen von Dokumenten überspringen

MongoDB unterstützt skip() Methode. Diese Methode überspringt die erforderliche Anzahl von Dokumenten. Sie akzeptiert ein numerisches Argument.

Syntax: collectionName.find().skip(number)

Beispiel:

> db.geekFlareCollection.find().skip(2)
{ "_id" : 3, "product" : "yogurt", "Qty" : 30 }
> db.geekFlareCollection.find().skip(3)

22. Sortieren und Abrufen von Dokumenten

MongoDB sort() Methode sortiert die Ausgabedokumente entweder in aufsteigender oder absteigender Reihenfolge. Diese Methode akzeptiert den Namen der Schlüssel mit der Nummer zur Angabe der Sortierreihenfolge. 1 wird für aufsteigende Reihenfolge verwendet, während -1 für absteigende Reihenfolge verwendet wird.

Syntax: collectionName.find().sort({key:1})

Beispiel:

> db.geekFlareCollection.find().sort({"Qty":1})
{ "_id" : 2, "product" : "bread", "Qty" : 20 }
{ "_id" : 3, "product" : "yogurt", "Qty" : 30 }
{ "_id" : 1, "product" : "bottles", "Qty" : 100 }

Validierung

23. Validierung von Dokumenten

Validatoren helfen dabei, die Art der Daten, die in die Dokumente eingefügt werden, einzuschränken. Validatoren werden in Sammlungen definiert. Für die Erstellung von Validatoren ist das Schlüsselwort Prüfer und optional Validierungsstufe und Validierungsmaßnahme um den Überprüfungsmodus festzulegen. Die Dokumentüberprüfung schränkt das Einfügen des neuen Feldes in das Dokument nicht ein.

Syntax: createCollection(“collectionName”,{validator:{ fields condition }})

Beispiel:

> db.createCollection( "Login",
...  { validator: { $and:
...       [
...          { phone: { $type: "string" } },
...          { email: { $regex: /@flares\.com$/ } },
...          { status: { $in: [ "Registered", "Unknown" ] } }
...       ]
...    }
... } )
{ "ok" : 1 }
>
> db.Login.insert({phone:1234})
WriteResult({
        "nInserted" : 0,
        "writeError" : {
                "code" : 121,
                "errmsg" : "Document failed validation"
        }
})
>
> db.Login.insert({phone:"1234",email:"abc@flares.com",status:"Unknown",mode:"limited"})
WriteResult({ "nInserted" : 1 })

24. Schemavalidatoren für eine neue Sammlung

Zusätzliches Schlüsselwort $jsonSchema zusammen mit zusätzliche Eigenschaften Wert als Falsch ist erforderlich, um Einschränkungen auf der Schemaebene vorzunehmen. Sie verhindert, dass neue Felder in das Dokument eingefügt werden.

Syntax: createCollection(“collectionName”,{validator: { $jsonSchema { schema condition } }})

Beispiel:

> db.createCollection( "Login", {
...    validator: { $jsonSchema: {
...        bsonType: "object",
...        "additionalProperties": false,
...       required: [ "email" ],
...       properties: {
...          email: {
...             bsonType : "string",
...             pattern : "@flares\.com$",
...             description: "string meets the given expression"
...          },
...          status: {
...             enum: [ "registered", "Invalid" ],
...             description: "status must be within enum values"
...          }
...       }
...    } },
... } )
{ "ok" : 1 }
>
> db.Login.insert({email:"abc@flares.com"})
WriteResult({
        "nInserted" : 0,
        "writeError" : {
                "code" : 121,
                "errmsg" : "Document failed validation"
        }
})

25. Schemavalidatoren für eine bestehende Sammlung aktualisieren oder erstellen

Ein Validator kann für eine bestehende Sammlung erstellt werden mit collMod

Syntax: runCommand({collMod:”collectionName”,validator:{schema condition}})

Beispiel:  

> db.runCommand(  {
collMod: "Login",
   validator: { $jsonSchema: {
       bsonType: "object",
 "additionalProperties": false,
      required: [ "email","status" ],
      properties: {
         email: {
            bsonType : "string",
            pattern : "@flares\.com$",
            description: "string meets the given expression"
         },
         status: {
            enum: [ "registered", "Invalid" ],
            description: "status must be within enum values"
         }
      }
   } },
      validationAction: "error",
         validationLevel: "strict"
} )
{ "ok" : 1 }

26. Schemavalidatoren für eine bestehende Sammlung entfernen

Um Schemavalidatoren zu entfernen, müssen Sie die <strong>validationLevel</strong> wie aus.

Syntax: runCommand({collMod:”collectionName”,validator:{ },validationLevel:off})

Beispiel:

> db.runCommand({
   collMod:"Login",
   validator:{},
   validationLevel:"off"
})
{ "ok" : 1 }
>
> db.Login.insert({"email":"abc"})
WriteResult({ "nInserted" : 1 })

27. Nach Validatoren für eine bestehende Sammlung suchen

Um zu prüfen, ob die vorhandene Sammlung über Schemavalidatoren verfügt, führen Sie den folgenden Befehl aus. Ohne Angabe des Sammlungsnamens db.getCollectionInfos() Methode liefert Details zu den Validatoren für alle Sammlungen, die sich in einer DB befinden.

Syntax: getCollectionInfos({name : “collectionName”})

Beispiel:

> db.getCollectionInfos({name: "Login"})
[
        {
                "name" : "Login",
                "type" : "collection",
                "options" : {
                        "validator" : {
                                "email" : {
                                        "$regex" : /@flares\.com$/
                                }
                        }
                },
                "info" : {
                        "readOnly" : false,
                        "uuid" : UUID("646674f6-4b06-466d-93b0-393b5f5cb4ff")
                },
                "idIndex" : {
                        "v" : 2,
                        "key" : {
                                "_id" : 1
                        },
                        "name" : "_id_",
                        "ns" : "geekFlareDB.Login"
                }
        }
]

Cursors verwandt

28. Cursor in MongoDB

Der Cursor ist ein Zeiger zur Iteration über die Ergebnismenge. MongoDB verwendet <strong>hasNext()</strong> und <strong>forEach()</strong> Methode für die Iteration. Eine Liste von Cursor-Methoden zur Verfügung gestellt wurde.

Beispiele:

> var newCursor=db.geekFlareCollection.find()
> newCursor.forEach(printjson)
{ "_id" : 1, "product" : "bottles", "Qty" : 100 }
{ "_id" : 2, "product" : "bread", "Qty" : 20 }
{ "_id" : 3, "product" : "yogurt", "Qty" : 30 }
>
> var newCursor1=db.geekFlareCollection.find()
> while(newCursor1.hasNext()){ printjson(newCursor1.next())}
{ "_id" : 1, "product" : "bottles", "Qty" : 100 }
{ "_id" : 2, "product" : "bread", "Qty" : 20 }
{ "_id" : 3, "product" : "yogurt", "Qty" : 30 

Dienstprogramm

29. Erstellen einer Datenbanksicherung

mongodump wird verwendet, um den Inhalt der MongoDB-Datenbank als Backup zu exportieren. Dieser Befehl wird über die Systemkonsole und nicht über die Mongo-Shell ausgeführt. Es erzeugt eine binäre Sicherung zusammen mit Metadateninformationen.

Syntax:

mongodump --db dbName --out outFile --host "IP:PORT"  --username <user>  --password <pass>

 Beispiel:

C:\mongodb\dump>mongodump  --db geekFlareDB --out "C:\mongodb\dump" --host "127.0.0.1:27017"
2020-06-02T12:26:34.428+0530    writing geekFlareDB.myTable to
2020-06-02T12:26:34.430+0530    writing geekFlareDB.geekFlareCollection to
2020-06-02T12:26:34.430+0530    writing geekFlareDB.mCollection to
2020-06-02T12:26:34.433+0530    writing geekFlareDB.users to
2020-06-02T12:26:34.434+0530    done dumping geekFlareDB.myTable (2 documents)
2020-06-02T12:26:34.434+0530    done dumping geekFlareDB.geekFlareCollection (4 documents)
2020-06-02T12:26:34.435+0530    writing geekFlareDB.contacts2 to
2020-06-02T12:26:34.435+0530    writing geekFlareDB.Login to
2020-06-02T12:26:34.436+0530    done dumping geekFlareDB.mCollection (2 documents)
2020-06-02T12:26:34.437+0530    done dumping geekFlareDB.users (1 document)
2020-06-02T12:26:34.437+0530    done dumping geekFlareDB.Login (0 documents)
2020-06-02T12:26:34.438+0530    done dumping geekFlareDB.contacts2 (0 documents)

30. Wiederherstellung der Datenbank aus der Sicherung

Der Nutzen <strong>mongorestore</strong> wird verwendet, um binäre Daten wiederherzustellen, die von mongodump.

Syntax: mongorestore --db newDB "pathOfOldBackup"

Beispiel:

C:\Users\asad.ali>mongorestore  --db geekFlareNew  "C:\mongodb\dump\geekFlare" --host "127.0.0.1:27017"
2020-06-09T15:49:35.147+0530    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2020-06-09T15:49:35.148+0530    building a list of collections to restore from C:\mongodb\dump\geekFlare dir
2020-06-09T15:49:35.152+0530    reading metadata for geekFlareNew.geekFlareCollection from C:\mongodb\dump\geekFlare\geekFlareCollection.metadata.json
2020-06-09T15:49:35.321+0530    restoring geekFlareNew.geekFlareCollection from C:\mongodb\dump\geekFlare\geekFlareCollection.bson
2020-06-09T15:49:35.461+0530    no indexes to restore
2020-06-09T15:49:35.462+0530    finished restoring geekFlareNew.geekFlareCollection (3 documents, 0 failures)
2020-06-09T15:49:35.467+0530    3 document(s) restored successfully. 0 document(s) failed to restore.

31. Sammlungen exportieren

So exportieren Sie den Inhalt der Sammlung in eine Datei (JSON oder CSV) mongoexport zur Verfügung gestellt. Verwenden Sie zur Ausführung dieses Befehls das Systemterminal.

  • Exportieren Sie eine einzelne Sammlung in eine Datei.

Syntax: mongoexport --db dbName --collection collectionName --out outputFile

Beispiel:

C:\mongodb\New folder>mongoexport --db geekFlareDB --collection geekFlareCol --out outFile.json
2020-06-06T19:02:29.994+0530    connected to: mongodb://localhost/
2020-06-06T19:02:30.004+0530    exported 6 records
  • Exportieren Sie ein bestimmtes Feld aus der Sammlung in eine Datei.

Syntax: mongoexport --db dbName --collection collectionName --out outputFile --fields fieldname

Beispiel:

C:\mongodb\New folder>mongoexport --db geekFlareDB --collection geekFlareCol --out outFile.json --fields product
2020-06-06T19:05:22.994+0530    connected to: mongodb://localhost/
2020-06-06T19:05:23.004+0530    exported 6 records

32. Sammlungen importieren

So importieren Sie Daten aus einer Datei (CSV oder JSON) mongoimport Befehlszeilentool verwendet werden kann.

Syntax: mongoimport --db dbName --collection collectionName --file inputFile

C:\Users\asad.ali>mongoimport --db geekFlareDB --collection geekFlareNew --file outFile.json
2020-06-09T14:52:53.655+0530    connected to: mongodb://localhost/
2020-06-09T14:52:53.924+0530    6 document(s) imported successfully. 0 document(s) failed to import.

Replik bezogen

Replikation ist etwas anderes als Sharding, sehen Sie sich diesen Leitfaden an Sharding implementieren.

33. MongoDB-Replikation

Die Replikation ist ein Prozess zur Synchronisierung von Daten auf mehreren Servern. Sie verhindert Datenverluste aufgrund von Hardware- oder Softwarefehlfunktionen. MongoDB erreicht die Replikation mit Hilfe von Replikatsätzen. Das Replikatset besteht aus primären und sekundären Mongo-Datensätzen im Cluster.

Der primäre Datensatz akzeptiert alle Schreibvorgänge und der sekundäre Datensatz liest vom primären. Für einen Mongo-Replikatsatz sind mindestens 3 Datensätze erforderlich. Der folgende Prozess ist erforderlich, um ein Replikatset einzurichten:

  • Start mongod Server mit replset Option auf mindestens 3 Knoten.

mongod --port 27017 --dbpath C:\data\data1 --replSet rs0 --oplogSize 128

mongod --port 27018 --dbpath C:\data\data1 --replSet rs0 --oplogSize 128

mongod --port 27019 --dbpath C:\data\data1 --replSet rs0 --oplogSize 128

  • Initialisieren Sie das Replikatset.

rs.initiate( {    _id : "rs0",    members: [   { _id: 0, host: "IP:27017" },   { _id: 1, host: "IP:27018" },   { _id: 2, host: "IP:27019" }    ] })

> rs.initiate( {
...    _id : "rs0",
...    members: [
...   { _id: 0, host: "localhost:27017" },
...   { _id: 1, host: "localhost:27018" },
...   { _id: 2, host: "localhost:27019" }
...    ]
... })
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1591089166, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1591089166, 1)
}

34. Prüfen Sie den Status der Replikation

Führen Sie den folgenden Befehl vom primären Replikationsknoten aus, um vollständige Informationen über den Replikationssatz zu erhalten.

rs.conf()

rs.status()

rs0:PRIMARY> rs.conf()
{
        "_id" : "rs0",
        "version" : 2,
        "protocolVersion" : NumberLong(1),
        "writeConcernMajorityJournalDefault" : true,
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:27017",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 1,
                        "host" : "localhost:27018",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 2,
                        "host" : "localhost:27019",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                },
                {
                        "_id" : 3,
                        "host" : "localhost:27016",
                        "arbiterOnly" : false,
                        "buildIndexes" : true,
                        "hidden" : false,
                        "priority" : 1,
                        "tags" : {

                        },
                        "slaveDelay" : NumberLong(0),
                        "votes" : 1
                }
        ],
        "settings" : {
                "chainingAllowed" : true,
                "heartbeatIntervalMillis" : 2000,
                "heartbeatTimeoutSecs" : 10,
                "electionTimeoutMillis" : 10000,
                "catchUpTimeoutMillis" : -1,
                "catchUpTakeoverDelayMillis" : 30000,
                "getLastErrorModes" : {

                },
                "getLastErrorDefaults" : {
                        "w" : 1,
                        "wtimeout" : 0
                },
                "replicaSetId" : ObjectId("5ed6180d01a39f2162335de5")
        }
}

 35. Hinzufügen einer neuen MongoDB-Instanz zu einer Replikatgruppe

Starten Sie den primären MongoDB-Client und führen Sie folgenden Befehl aus

Syntax: rs.add(“hostname:port”)

Beispiel:

rs0:PRIMARY> rs.add("localhost:27016")
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1591094195, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1591094195, 1)
}

36. Vorhandene MongoDB-Instanz aus dem Replikatsatz entfernen

Mit dem folgenden Befehl wird der erforderliche sekundäre Host aus dem Replikatsatz entfernt.

Syntax: rs.remove("localhost:27017")

Beispiel:

rs0:PRIMARY> rs.remove("localhost:27016")
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1591095681, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1591095681, 1)
}
rs0:PRIMARY>

 37. Primäres als sekundäres Replikatset erstellen

MongoDB bietet einen Befehl, um das primäre Replikat anzuweisen, ein sekundäres Replikatset zu werden.

Syntax: rs.stepDown( stepDownSecs , secondaryCatchupSecs )

Beispiel:

rs0:PRIMARY> rs.stepDown(12)
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1591096055, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1591096055, 1)
}
rs0:SECONDARY>

38. Prüfen Sie den Replikationsrückstand zwischen Primär und Sekundär

Der folgende Befehl wird verwendet, um den Replikationsrückstand zwischen allen Replikatsätzen des Primärsystems zu überprüfen.

Syntax: rs.printSlaveReplicationInfo()

Beispiel:

rs0:PRIMARY> rs.printSlaveReplicationInfo()
source: localhost:27018
        syncedTo: Tue Jun 02 2020 16:14:04 GMT+0530 (India Standard Time)
        0 secs (0 hrs) behind the primary
source: localhost:27019
        syncedTo: Thu Jan 01 1970 05:30:00 GMT+0530 (India Standard Time)
        1591094644 secs (441970.73 hrs) behind the primary
source: localhost:27016
        syncedTo: Tue Jun 02 2020 16:14:04 GMT+0530 (India Standard Time)
        0 secs (0 hrs) behind the primary
rs0:PRIMARY>

Transaktionen im Zusammenhang mit

39. Transaktionen in MongoDB

MongoDB unterstützt ACID-Eigenschaften für Transaktionen mit Dokumenten.

Um eine Transaktion zu starten, ist eine Sitzung erforderlich, und um Änderungen in der Datenbank zu speichern, ist eine Übergabe erforderlich. Transaktionen werden auf Replikatsätzen oder Mangos unterstützt. Sobald die Sitzung erfolgreich übertragen wurde, sind die innerhalb der Sitzung durchgeführten Vorgänge auch außerhalb der Sitzung sichtbar.

  • Sitzung beginnen

Syntax: session =db.getMongo().startSession()

  • Transaktion starten,

Syntax: session.startTransaction()

  • Transaktion abschließen

Syntax: session.commitTransaction()

Beispiel:

Wir erstellen eine Sitzung, starten die Transaktion, führen eine Einfügung/Aktualisierung durch und übertragen die Transaktion.

rs0:PRIMARY> session = db.getMongo().startSession()
session { "id" : UUID("f255a40d-81bd-49e7-b96c-9f1083cb4a29") }
rs0:PRIMARY> session.startTransaction()
rs0:PRIMARY> session.getDatabase("geekFlareDB").geekFlareCollection.insert([
... {_id: 4 , product: "ketchup"},
... {_id: 5, product: "Cheese"}
... ]);
BulkWriteResult({
        "writeErrors" : [ ],
        "writeConcernErrors" : [ ],
        "nInserted" : 2,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})
rs0:PRIMARY> session.getDatabase("geekFlareDB").geekFlareCollection.find()
{ "_id" : 1, "product" : "bread", "Qty" : 20 }
{ "_id" : 2, "product" : "bottles", "Qty" : 100 }
{ "_id" : 3, "product" : "bread", "Qty" : 20 }
{ "_id" : 4, "product" : "ketchup" }
{ "_id" : 5, "product" : "Cheese" }
rs0:PRIMARY> db.geekFlareCollection.find()
{ "_id" : 1, "product" : "bread", "Qty" : 20 }
{ "_id" : 2, "product" : "bottles", "Qty" : 100 }
{ "_id" : 3, "product" : "bread", "Qty" : 20 }
rs0:PRIMARY> session.commitTransaction()
rs0:PRIMARY> db.geekFlareCollection.find()
{ "_id" : 1, "product" : "bread", "Qty" : 20 }
{ "_id" : 2, "product" : "bottles", "Qty" : 100 }
{ "_id" : 3, "product" : "bread", "Qty" : 20 }
{ "_id" : 4, "product" : "ketchup" }
{ "_id" : 5, "product" : "Cheese" }
rs0:PRIMARY> session.getDatabase("geekFlareDB").geekFlareCollection.find()
{ "_id" : 1, "product" : "bread", "Qty" : 20 }
{ "_id" : 2, "product" : "bottles", "Qty" : 100 }
{ "_id" : 3, "product" : "bread", "Qty" : 20 }
{ "_id" : 4, "product" : "ketchup" }
{ "_id" : 5, "product" : "Cheese" }

40. Einzelbeleg-Transaktionen Konflikt

Wenn zwei Transaktionen versuchen, dasselbe Dokument zu aktualisieren, löst MongoDB einen Schreibkonfliktfehler aus.

  • session1.startTransaction()
  • session2.startTransaction()

Führen Sie eine Einfügung/Aktualisierung in Session1 und anschließend in Session2 durch. Beobachten Sie nun den Fehler im folgenden Beispiel

Beispiel:

rs0:PRIMARY> session1.startTransaction()
rs0:PRIMARY> session2.startTransaction()
rs0:PRIMARY> session1.getDatabase("geekFlareDB").geekFlareCollection.update({_id:3},{$set:{ product: "Bread" }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
rs0:PRIMARY> session2.getDatabase("geekFlareDB").geekFlareCollection.update({_id:3},{$set:{ product: "Snacks" }})
WriteCommandError({
        "errorLabels" : [
                "TransientTransactionError"
        ],
        "operationTime" : Timestamp(1591174593, 1),
        "ok" : 0,
        "errmsg" : "WriteConflict",
        "code" : 112,
        "codeName" : "WriteConflict",
        "$clusterTime" : {
                "clusterTime" : Timestamp(1591174593, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
})
rs0:PRIMARY>

41. Mehrbeleg-Transaktionen

MongoDB unterstützt Transaktionen mit mehreren Dokumenten in einer einzigen Sitzung.

  • db.getMongo().startTransaction()

Einfügen/Aktualisieren von mehreren Dokumenten

  • Sitzung.commitTransaction()

Beispiel:

rs0:PRIMARY> var session = db.getMongo().startSession()
rs0:PRIMARY> session.startTransaction()
rs0:PRIMARY> session.getDatabase("geekFlareDB").geekFlareCollection.update({_id:3},{$set:{ product: "Snacks3" }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
rs0:PRIMARY> session.getDatabase("geekFlareDB").geekFlareCollection.update({_id:2},{$set:{ product: "Snacks2" }})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
rs0:PRIMARY> session.commitTransaction()
rs0:PRIMARY> db.geekFlareCollection.find()
{ "_id" : 1, "product" : "bread", "Qty" : 20 }
{ "_id" : 2, "product" : "Snacks2", "Qty" : 100 }
{ "_id" : 3, "product" : "Snacks3", "Qty" : 20 }
{ "_id" : 4, "product" : "ketchup" }
{ "_id" : 5, "product" : "Cheese" }
rs0:PRIMARY>

42. Profilerstellung in MongoDB

Profiling hilft bei der Protokollierung langsamer Abfragen in der system.profile Sammlung. Profiler-Ebene und Stichprobenrate definieren den Prozentsatz der zu protokollierenden Abfragen system.profile Sammlung.

  • Profilierungsebene festlegen/abrufen

Syntax:

db.setProfilingLevel(profilingLevel,{"slowms":time,"sampleRate":LoggingPercentage})

> db.setProfilingLevel(2,{"slowms":1,"sampleRate":1})
{ "was" : 1, "slowms" : 1, "sampleRate" : 0.5, "ok" : 1 }
>
> db.getProfilingLevel()
2
  • Profiling-Status abrufen

Syntaxdb.getProfilingStatus()

> db.getProfilingStatus()
{ "was" : 2, "slowms" : 1, "sampleRate" : 1 }
  • Um die Profilerstellung auf Ebene der MongoDB-Instanz zu aktivieren, starten Sie die Instanz mit Profiler-Informationen oder fügen Sie Profiler-Details in der Konfigurationsdatei hinzu.

Syntax:

mongod --profile <Level> --slowms <time> --slowOpSampleRate <%Logging>

Beispiel:

C:\Windows\System32>mongod  --port 27017 --dbpath C:\data\data1  --profile 1 --slowms 25 --slowOpSampleRate  0.5
2020-06-09T02:34:41.110-0700 I  CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2020-06-09T02:34:41.113-0700 W  ASIO     [main] No TransportLayer configured during NetworkInterface startup
2020-06-09T02:34:41.113-0700 I  CONTROL  [initandlisten] MongoDB starting : pid=22604 port=27017 dbpath=C:\data\data1 64-bit host=MCGL-4499
2020-06-09T02:34:41.114-0700 I  CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2020-06-09T02:34:41.116-0700 I  CONTROL  [initandlisten] db version v4.2.7
2020-06-09T02:34:41.116-0700 I  CONTROL  [initandlisten] git version: 51d9fe12b5d19720e72dcd7db0f2f17dd9a19212 

43. MongoDB Erklären()

MongoDB explains() Methode liefert Statistiken und Informationen, um einen erfolgreichen Plan auszuwählen und ihn bis zum Ende auszuführen. Sie gibt die Ergebnisse gemäß der Ausführlichkeitsplan.

Syntax: collectionName.explain(“verbosityName”)

Um die Methode/den Befehl explain() auszuführen, erstellen wir eine Ausführlichkeit und dann die Methode explain() ausführen. Sehen Sie sich das folgende Beispiel an, in dem diese Schritte ausgeführt wurden.

Beispiel:

> db.runCommand(
...    {
...       explain: { count: "product", query: { Qty: { $gt: 10 } } },
...       verbosity: "executionStats"
...    }
... )
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "test.product",
                "indexFilterSet" : false,
                "winningPlan" : {
                        "stage" : "COUNT",
                        "inputStage" : {
                                "stage" : "EOF"
                        }
                },
                "rejectedPlans" : [ ]
        },
        "executionStats" : {
                "executionSuccess" : true,
                "nReturned" : 0,
                "executionTimeMillis" : 47,
                "totalKeysExamined" : 0,
                "totalDocsExamined" : 0,
                "executionStages" : {
                        "stage" : "COUNT",
                        "nReturned" : 0,
                        "executionTimeMillisEstimate" : 0,
                        "works" : 1,
                        "advanced" : 0,
                        "needTime" : 0,
                        "needYield" : 0,
                        "saveState" : 0,
                        "restoreState" : 0,
                        "isEOF" : 1,
                        "nCounted" : 0,
                        "nSkipped" : 0,
                        "inputStage" : {
                                "stage" : "EOF",
                                "nReturned" : 0,
                                "executionTimeMillisEstimate" : 0,
                                "works" : 0,
                                "advanced" : 0,
                                "needTime" : 0,
                                "needYield" : 0,
                                "saveState" : 0,
                                "restoreState" : 0,
                                "isEOF" : 1
                        }
                }
        },
        "serverInfo" : {
                "host" : "MCGL-4499",
                "port" : 27017,
                "version" : "4.2.7",
                "gitVersion" : "51d9fe12b5d19720e72dcd7db0f2f17dd9a19212"
        },
        "ok" : 1
}
>
>  var expv = db.geekFlareCol.explain("executionStats")
> expv.find( { product: "bread"} )
{
        "queryPlanner" : {
                "plannerVersion" : 1,
                "namespace" : "geekFlareDB.geekFlareCol",
                "indexFilterSet" : false,
                "parsedQuery" : {
                        "product" : {
                                "$eq" : "bread"
                        }
                },
                "winningPlan" : {
                        "stage" : "COLLSCAN",
                        "filter" : {
                                "product" : {
                                        "$eq" : "bread"
                                }
                        },
                        "direction" : "forward"
                },
                "rejectedPlans" : [ ]
        },
        "executionStats" : {
                "executionSuccess" : true,
                "nReturned" : 2,
                "executionTimeMillis" : 0,
                "totalKeysExamined" : 0,
                "totalDocsExamined" : 6,
                "executionStages" : {
                        "stage" : "COLLSCAN",
                        "filter" : {
                                "product" : {
                                        "$eq" : "bread"
                                }
                        },
                        "nReturned" : 2,
                        "executionTimeMillisEstimate" : 0,
                        "works" : 8,
                        "advanced" : 2,
                        "needTime" : 5,
                        "needYield" : 0,
                        "saveState" : 0,
                        "restoreState" : 0,
                        "isEOF" : 1,
                        "direction" : "forward",
                        "docsExamined" : 6
                }
        },
        "serverInfo" : {
                "host" : "MCGL-4499",
                "port" : 27017,
                "version" : "4.2.7",
                "gitVersion" : "51d9fe12b5d19720e72dcd7db0f2f17dd9a19212"
        },
        "ok" : 1
}
>

Zugangskontrolle

44. Zugriffskontrolle in MongoDB

Zugriffskontrollfunktionen ermöglichen den Authentifizierungszugriff auf vorhandene Benutzer. Für die Zugriffskontrolle aktiviert DB, um sicherzustellen, dass ein Benutzer Admin-Rolle in admin DB erstellen.

  • DB ohne Authentifizierung verbinden.
  • Wechsel zur Datenbank

use admin

  • Benutzer wie unten erstellen

db.createUser( {user: “UserAdmin”, pwd: “password” ,role: [adminRole])

 Beispiel:

db.createUser(
...   {
...     user: "AdminUser",
...     pwd: passwordPrompt(),
...     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
...   }
... )
Enter password:
Successfully added user: {
        "user" : "AdminUser",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                "readWriteAnyDatabase"
        ]
}
  • Neustart mongod Instanz
  • Greifen Sie erneut mit dem erstellten Benutzer und Passwort zu.
C:\Users\>mongo  --port 27017  --authenticationDatabase "admin" -u "AdminUser" -p
MongoDB shell version v4.2.7
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb

45. Zugriffskontrollbenutzer abrufen und löschen

Mit dem folgenden Befehl können Sie die Benutzerdaten überprüfen und löschen.

  • db.getUser("AdminUser")
  • db.dropUser("AdminUser")

Beispiel:

> db.getUser("AdminUser")
{
        "_id" : "admin.AdminUser",
        "userId" : UUID("78d2d5bb-0464-405e-b27e-643908a411ce"),
        "user" : "AdminUser",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                {
                        "role" : "readWriteAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}
> db.dropUser("AdminUser")
true
> db.getUser("AdminUser")
null
>

46. Benutzerdefinierte Rollen zuweisen

MongoDB bietet db.createRole() Methode, um die Privilegien für einen Benutzer und ein Array von geerbten Rollen anzugeben.

  • Verbinden Sie die MongoDB-Instanz mit dem Benutzer admin.
  • Führen Sie den folgenden Befehl aus, um eine neue Rolle zu erstellen.

Syntax:

db.createRole({role:”roleName”,privileges:[{privilegeName}],roles:[InheritedArray]})

Beispiel:

use admin
> db.createRole(
...    {
...      role: "abc",
...      privileges: [ { resource: { db: "geekFlareDB", collection: "geekFlareCol" }, actions: [ "killop" ,"inprog"] } ],
...      roles: []
...    }
... )
{
        "role" : "abc",
        "privileges" : [
                {
                        "resource" : {
                                "db" : "geekFlareDB",
                                "collection" : "geekFlareCol"
                        },
                        "actions" : [
                                "killop",
                                "inprog"
                        ]
                }
        ],
        "roles" : [ ]
}

47. Benutzerdefinierte Rollen widerrufen

Um die vorhandenen Rollen zu ändern, verwenden Sie den folgenden Befehl.

Syntax: db.revokeRolesFromUser( userName, [{ "role" : roleName , db:dbName} ] )

Beispiel:

> db.getUser("AdminUser")
{
        "_id" : "admin.AdminUser",
        "userId" : UUID("fe716ed1-6771-459e-be13-0df869c91ab3"),
        "user" : "AdminUser",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                },
                {
                        "role" : "readWriteAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}
> db.revokeRolesFromUser( "AdminUser", [{ "role" : "userAdminAnyDatabase" , db:"admin"} ] )
> db.getUser("AdminUser")
{
        "_id" : "admin.AdminUser",
        "userId" : UUID("fe716ed1-6771-459e-be13-0df869c91ab3"),
        "user" : "AdminUser",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "readWriteAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}
>

48. MongoDB-Konnektivität mit Python

Das Paket pymongo wird benötigt, um MongoDB von der Python-Konsole aus zu verbinden.

>>> from pymongo import MongoClient
>>> mClient=MongoClient("mongodb://127.0.0.1:27017/")
>>> mDB=mClient.geekFlareDB
>>> mRecord={"_id":4,"name":"XYZ"}
>>> mDB.geekFlareCollection.insert_one(mRecord)
<pymongo.results.InsertOneResult object at 0x000002CC44256F48>
>>> for i in mDB.geekFlareCollection.find({"_id":4}):
...     print(i)
...
{'_id': 4, 'name': 'XYZ'}
>>>

Was kommt als Nächstes?

Sehen Sie sich diese Liste von NoSQL-Kunden um MongoDB und andere NoSQL-Datenbanken zu verwalten. Wenn Sie beruflich häufig mit MongoDB zu tun haben, dann sollten Sie mehr über dieses Thema erfahren Udemy-Kurs.

  • Asad Ali
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre auf Database
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder