48 MongoDB-Befehle und Abfragen, die Sie als Entwickler und DBA kennen sollten

Dieser Artikel beschreibt die häufig verwendeten Abfragen und Befehle von MongoDB Wird von Entwicklern und DBA in ihrem täglichen Entwicklungs- und Betriebsleben verwendet.

Quick Intro

In dieser neuen Ära der intelligenten Technologie werden Daten in großem Umfang generiert, und jedes Datenelement ist für wachsende Branchen gleichermaßen wichtig. Benutzer generieren strukturierte, halbstrukturierte und unstrukturierte Daten in unbegrenzter Menge. Strukturierte Daten umfassen das Speichern von Daten in Tabellen und Zeilen, während unstrukturierte Daten aus Bildern, Videos und Sprachclips bestehen. Aufgrund des zunehmenden Datenvolumens strukturierter und unstrukturierter Daten ist die Notwendigkeit von NoSQL-Datenbank kommt ins Bild.

Es bietet Entwicklern die Möglichkeit, ein Schema und eine skalierbare Plattform für Datenbankadministratoren zu entwerfen. Es bietet eine sichere und schnelle Plattform.

What is MongoDB?

MongoDB ist eine dokumentenorientierte, plattformübergreifende und Open-Source-NoSQL-Datenbank, in der in C ++ geschriebene halbstrukturierte Daten gespeichert werden. Anstelle von Tabellen und Zeilen speichert MongoDB Daten in Schlüssel-Wert-Paaren. Im Folgenden finden Sie einige der häufig verwendeten MongoDB-Befehle, um Entwicklern und Administratoren das Lernen zu erleichtern.

Fangen wir an.

Basic Commands

1. Versionsprüfung

Der wichtigste Befehl besteht darin, die installierte Version des MongoDB-Servers und der Mongo Shell zu überprüfen. Führen Sie diesen Befehl auf dem 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 Befehl zum Überprüfen der Version 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 Benutzern, alle Befehle herauszufinden, die in MongoDB verwendet werden können. Führen Sie den Befehl auf 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 folgende Befehl enthält Details zu Datenbanken sowie mehrere Sammlungen und zugehörige Parameter dieser Datenbank.

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. Erstellen Sie eine neue Datenbank oder wechseln Sie zu einer vorhandenen Datenbank

Dieser einfache Befehl hilft beim Erstellen einer neuen Datenbank, falls diese nicht vorhanden ist, oder beim Wechseln zur vorhandenen Datenbank. In MongoDB ist "Test" die Standarddatenbank, daher verwenden Benutzer "TestDB, sobald Mongo Shell angemeldet ist.

use DB_Name

mongos> use geekFlareDB switched to db geekFlareDB

5. Auflisten aller Datenbanken

Der erwähnte 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. Überprüfen Sie die aktuell verwendete Datenbank

Führen Sie den folgenden Befehl in Mongo Shell aus, um die aktuell verwendete Datenbank anzuzeigen.

db

> db GeekFlare

 7. Löschen Sie die Datenbank

Der angegebene Befehl hilft dem Benutzer, die erforderliche Datenbank zu löschen. Führen Sie den Befehl auf dem MongoDB-Client aus. Stellen Sie sicher, dass Sie die Datenbank auswählen, bevor Sie den Befehl drop ausführen. Andernfalls wird die Standardeinstellung „TestDatenbank.

db.dropDatabase()

Lassen Sie uns zuerst die gesamte Datenbank 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

Sammlungen ähneln Tabellen in RDBMS.

Der Befehl zum Erstellen einer Sammlung besteht aus zwei Parametern. Die Sammlung besteht aus null oder mehr Dokumenten. Daher ist für die Erstellung einer Sammlung ein obligatorischer Parameter, der im Befehl verwendet werden soll, dessen Name und optionaler Parameter kann den Namen von Dokumenten, ihre Größe und den Index enthalten.

Syntax: db.createCollection(Name,Options)

Beispiel:

> use geekFlare switched to db geekFlare > > db.createCollection("geekFlareCollection") { "ok" : 1 } > > show collections geekFlareCollection

Beschränken Sie dabei die Größe und Anzahl der Dokumente, die in die Sammlung eingefügt werden sollen. Die begrenzte Sammlung verfügt über eine Eigenschaft zum Entfernen der ältesten Dokumente, um Platz für neue Dokumente zu schaffen.

Syntax:

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

Beispiel: Lassen Sie uns eine begrenzte Sammlung erstellen, einen Datensatz einfügen und abrufen

> 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. Drop-Sammlung

Der Befehl "Sammlung löschen" ähnelt DDL in RDBMS. Es erwirbt Sperren für die erforderliche Sammlung bis zur Ausführung des Befehls. Drop-Sammlung entfernt die Sammlung zusammen mit allen dieser Sammlung zugeordneten Indizes aus der Datenbank. Zum Löschen der Auflistung ist die drop () -Methode erforderlich.

Es gibt true für erfolgreiches Löschen und false zurück, wenn ein Fehler auftritt oder die DB nicht vorhanden ist.

Syntax: collectionName.drop()

Beispiel:

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

CRUD Operations related

10. Dokument in Sammlung einfügen

In MongoDB ähnelt das Dokument einem Tupel in RDBMS.

Um ein Dokument zu erstellen, müssen Sie die insert() Methode wird verwendet. Die Methode insert () erstellt ein oder mehrere Dokumente in der vorhandenen Sammlung. Es wird auch eine Sammlung erstellt, wenn diese nicht in der Datenbank vorhanden ist. In MongoDB ist Document schemalos. Dies bedeutet, dass beim Einfügen einer beliebigen Anzahl von Schlüsseln in ein Dokument keine Einschränkungen bestehen.

Einen Datensatz einfügen insert() or insertOne() Methode kann verwendet werden.

Syntax: collectionName.insertOne({document})

Beispiel:

> db.geekFlareCollection.insertOne( {  code: "P123", Qty: 200, status: "Active" }); {         "acknowledged" : true,         "insertedId" : ObjectId("5ed309725429283aee2e134d") }

Um viele Datensätze einzufügen, wird eine Liste von Datensätzen an übergeben insert() or 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" } >

Eine große Anzahl von Dokumenten kann auch durch Ausführen geordnet und ungeordnet eingefügt werden 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

Um nach dem in einer Sammlung gespeicherten Dokument zu suchen, kann die Methode find () verwendet werden. Der folgende Befehl wird verwendet, um alle Dokumente aus der Sammlung 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" }

Syntax: collectionName.find({ condition })

Beispiel:

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

Syntax: collectionName.findOne()

Beispiel:

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

12. Verschönern Sie die Abrufausgabe

Der find() Methode gibt eine unorganisierte Ausgabe. MongoDB bietet pretty() Befehle zum Abrufen der formatierten Ausgabe.

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 zum Festlegen neuer Werte für vorhandene Schlüssel in Dokumenten. Der Befehl Aktualisieren enthält Details zu geänderten und übereinstimmenden Dokumenten. Die Syntax des Aktualisierungsbefehls 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 }

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

Beispiel:

> db.geekFlareCollection.updateOne({"product" : "bottles"},{$set : {"Qty": 40}}  ) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

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 lautet:

 Syntax: collectionName.deleteOne({DeletionCondition})

Beispiel:

> db.geekFlareCollection.deleteOne({"product" : "bread"}) { "acknowledged" : true, "deletedCount" : 1 }

 Syntax: collectionName.deleteMany({DeletionCondition})

Beispiel:

> db.geekFlareCollection.deleteMany({"product" : "bottles"}) { "acknowledged" : true, "deletedCount" : 2 }

        Hinweis: Die Methode zum Entfernen ist in zukünftigen Versionen veraltet.

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

Beispiel:

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

15. Distinct abrufen

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

Syntax: collectionName.distinct(field)

Beispiel:

> db.geekFlareCollection.distinct("product") [ "Cheese", "Snacks2", "Snacks3", "bread", "ketchup" ]

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

Indexing

17. Erstellen Sie einen Index für das Dokument

Indizes sind eine spezielle Datenstruktur, in der ein kleiner Teil des Datensatzes der Sammlung in leicht zu durchlaufender Form gespeichert wird. Indizes unterstützen die aufsteigende und absteigende Reihenfolge der Feldwerte und ermöglichen somit eine bessere Leistung beim Abrufen.

MongoDB bietet die default_id Index. MongoDB unterstützt auch die Erstellung benutzerdefinierter Indizes. MongoDB-Indizes werden auf Sammlungsebene definiert und bieten Unterstützung für Felder oder Unterfelder eines Dokuments. Die Syntax zum Erstellen des Index lautet:

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

In diesem Fall gibt der Schlüssel das Feld an, für das ein Index erstellt wird, und 1 gibt die aufsteigende Reihenfolge an. 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 }

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 zum Auflisten aller in einem Dokument erstellten Indizes.

Syntax: collectionName.getIndexes()

Beispiel:

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

19. Entfernen Sie den Index aus dem Dokument

dropIndex() Mit der Methode wird der einzelne Index gelöscht, und mit der Methode dropIndexes () werden mehrere Indizes gelöscht.

Syntax: collectionName.dropIndex({key})

Beispiel:

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

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

Beispiel:

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

Retrieval related

20. Beschränken Sie den Abruf von Dokumenten

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

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. Überspringen Sie das Abrufen von Dokumenten

MongoDB unterstützt skip() Methode. Diese Methode überspringt die erforderliche Anzahl von Dokumenten. Es 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 Sie das Abrufen von Dokumenten

MongoDB sort() Methode sortieren Sie 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 die aufsteigende Reihenfolge verwendet, während -1 für die Angabe der absteigenden 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 }

Validation related

23. Dokumentenvalidierung

Validatoren helfen dabei, die Art der Daten einzuschränken, die in die Dokumente eingefügt werden. Validatoren werden bei der Erfassung definiert. Die Verwendung eines Validators ist erforderlich, um das Schlüsselwort zu verwenden Validator Und optional Validierungsstufe und Validierungsaktion um den Validierungsmodus anzugeben. Die Dokumentvalidierung schränkt das Einfügen des neuen Felds 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:"[email protected]",status:"Unknown",mode:"limited"}) WriteResult({ "nInserted" : 1 })

24. Schema-Validatoren für eine neue Sammlung

Zusätzliches Schlüsselwort $ jsonSchema zusammen mit zusätzliche Eigenschaften Wert als falsch ist erforderlich, um Einschränkungen auf Schemaebene festzulegen. Es verhindert, dass neue Felder zum Dokument hinzugefü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:"[email protected]"}) WriteResult({         "nInserted" : 0,         "writeError" : {                 "code" : 121,                 "errmsg" : "Document failed validation"         } })

25. Aktualisieren oder erstellen Sie Schema-Validatoren für eine vorhandene Sammlung

Ein Validator kann für eine vorhandene Sammlung mit erstellt werden 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. Entfernen Sie Schema-Validatoren für eine vorhandene Sammlung

Zum Entfernen von Schema-Validatoren muss festgelegt werden <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. Suchen Sie in einer vorhandenen Sammlung nach Validatoren

Um zu überprüfen, ob in der vorhandenen Sammlung Schemaüberprüfer ausgeführt werden, führen Sie den folgenden Befehl aus. Ohne Angabe des Sammlungsnamens db.getCollectionInfos() Die Methode enthält Details zu Validatoren für alle Sammlungen, die sich in einer Datenbank 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 related

28. Cursor in MongoDB

Der Cursor ist ein Zeiger zum Durchlaufen der Ergebnismenge. MongoDB verwendet <strong>hasNext()</strong> und <strong>forEach()</strong> Methode zur Iteration. Eine Liste von Cursormethoden wurde zur Verfügung gestellt.

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 

Utility

29. Erstellen einer Datenbanksicherung

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

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. Wiederherstellen der Datenbank aus dem Backup

Das Dienstprogramm <strong>mongorestore</strong> wird verwendet, um Binärdaten wiederherzustellen, die von generiert wurden 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 Dienstprogramm wurde bereitgestellt. Verwenden Sie zum Ausführen dieses Befehls das Systemterminal.

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

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 kann verwendet werden.

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.

Replica related

Die Replikation unterscheidet sich vom Sharding. Weitere Informationen finden Sie in diesem Handbuch Sharding implementieren.

33. MongoDB-Replikation

Bei der Replikation werden Daten auf mehreren Servern synchronisiert. Es verhindert Datenverlust aufgrund von Fehlfunktionen der Hardware oder Software. MongoDB erreicht die Replikation mithilfe von Replikatsätzen. Der Replikatsatz besteht aus primären und sekundären Mongo-Datensätzen im Cluster.

Der primäre Datensatz akzeptiert alle Schreibvorgänge und Lesevorgänge des sekundären Datensatzes vom primären. Im Mongo Replica-Satz sind mindestens 3 Datensätze erforderlich. Der folgende Prozess ist erforderlich, um ein Replikatset einzurichten:

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

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. Überprüfen Sie den Status der Replikation

Führen Sie den folgenden Befehl vom primären Replikatknoten aus, um vollständige Informationen zum Replikatsatz 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. Fügen Sie einem Replikatsatz eine neue MongoDB-Instanz hinzu

Starten Sie den primären MongoDB-Client und führen Sie den 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. Entfernen Sie die vorhandene MongoDB-Instanz aus dem Replikatsatz

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. Machen Sie Primär als Sekundärreplikatsatz

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. Überprüfen Sie die Replikatverzögerung zwischen primär und sekundär

Der folgende Befehl wird verwendet, um die Replikationsverzögerung zwischen allen vom Primärsatz festgelegten Replikaten 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>

Transactions related

39. Transaktionen in MongoDB

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

Um eine Transaktion zu starten, muss eine Sitzung gestartet werden, und ein Commit ist erforderlich, um Änderungen an der Datenbank zu speichern. Transaktionen werden auf Replikatsätzen oder Mangos unterstützt. Sobald die Sitzung erfolgreich festgeschrieben wurde, werden innerhalb der Sitzung ausgeführte Vorgänge außerhalb angezeigt.

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

Syntax: session.startTransaction()

Syntax: session.commitTransaction()

Beispiel:

Lassen Sie uns eine Sitzung erstellen, die Transaktion starten, einfügen / aktualisieren und dann die Transaktion festschreiben.

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. Konflikt bei Transaktionen mit einzelnen Dokumenten

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

Führen Sie eine Einfügung / Aktualisierung für Sitzung1 durch, gefolgt von Sitzung2. Beachten 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. Transaktionen mit mehreren Dokumenten

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

Führen Sie einige Einfügungen / Aktualisierungen für mehrere Dokumente durch

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

Die Profilerstellung hilft bei der Protokollierung langsamer Abfragen in der system.profile Sammlung. Profiler-Ebene und Abtastrate definieren den Prozentsatz der Abfragen, die angemeldet werden sollen system.profile Sammlung.

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

Syntax: db.getProfilingStatus ()

> db.getProfilingStatus() { "was" : 2, "slowms" : 1, "sampleRate" : 1 }

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() Die Methode gibt Statistiken zurück und liefert Informationen, um einen Gewinnerplan auszuwählen und vollständig auszuführen. Es werden Ergebnisse gemäß dem zurückgegeben Ausführlichkeitsplan.

Syntax: collectionName.explain(“verbosityName”)

Um die Methode / den Befehl EXPLAIN () auszuführen, erstellen wir eine Ausführlichkeit und führen Sie dann die Methode EXPLAIN () aus. Schauen 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 } >

Access control related

44. Zugriffskontrolle in MongoDB

Zugriffssteuerungsfunktionen ermöglichen den Authentifizierungszugriff auf vorhandene Benutzer. Für die Zugriffssteuerung kann die DB sicherstellen, dass eine Benutzeradministratorrolle in der Administrator-DB erstellt wird.

use admin

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"         ] }
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. Zugriffssteuerungsbenutzer abrufen und löschen

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

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. ​​Gewähren Sie benutzerdefinierte Rollen

MongoDB bietet db.createRole() Methode zum Angeben der Berechtigungen für einen Benutzer und ein Array geerbter Rollen.

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

Verwenden Sie den folgenden Befehl, um die vorhandenen Rollen zu ändern.

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 Pymongo-Paket ist erforderlich, um MongoDB über die Python-Konsole 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?

Schau dir diese Liste an NoSQL-Clients um MongoDB und andere NoSQL-Datenbanken zu verwalten. Wenn Sie häufig an MongoDB arbeiten, möchten Sie möglicherweise mehr daraus lernen Udemy natürlich.