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.
- 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 begrenzten Sammlung
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.
- Einfügen eines einzelnen Datensatzes
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") }
- Einfügen mehrerer Datensätze
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" } >
- Datensatz in loser Schüttung einfügen
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.
find()
Mit dieser Methode können alle in einer Sammlung gespeicherten Dokumente abgerufen werden.
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})
Die Methode kann verwendet werden, um nur die erforderlichen Dokumente basierend auf bestimmten Bedingungen aus der Sammlung abzurufen. MongoDB bietet eine Liste von Projektions- und Abfrageoperatoren um den BSON-Typwert 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. Es gibt eine formatierte Ausgabe.
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 }
updateOne()
: Um ein einzelnes Dokument zu aktualisieren, gibt esupdateOne()
Methode.updateOne()
Geben Sie 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 MongoDBupdateMany()
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 lautet:
<strong>deleteOne({condition}) </strong>
Entfernt das einzelne 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öschkriteriendeleteMany({condition})
Entfernt alle Dokumente.
Syntax: collectionName.deleteMany({DeletionCondition})
Beispiel:
> db.geekFlareCollection.deleteMany({"product" : "bottles"}) { "acknowledged" : true, "deletedCount" : 2 }
<strong>remove() </strong>
Es gibt eine andere Methode, um alle Dokumente zu löschen, die den Löschkriterien entsprechen. Die Methode remove () akzeptiert zwei Argumente, eines ist eine Löschbedingung und das andere ist nur ein Flag.
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.
- Um eindeutige Datensätze aus einem Feld zu erhalten.
Syntax: collectionName.distinct(field)
Beispiel:
> db.geekFlareCollection.distinct("product") [ "Cheese", "Snacks2", "Snacks3", "bread", "ketchup" ]
- So erhalten Sie unterschiedliche Datensätze aus einem Feld, während Sie die Abfrage angeben.
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:
- Erstellen Sie einen Index für ein einzelnes Feld.
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 }
- 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 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.
- Einzelindex entfernen
Syntax: collectionName.dropIndex({key})
Beispiel:
> db.geekFlareCollection.dropIndex({"product" : 1}) { "nIndexesWas" : 3, "ok" : 1 }
- Entfernen Sie mehrere Indizes.
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.
- 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 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:
- Start
mongod
Server mitreplset
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 den Replikatsatz.
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.
- Sitzung starten
Syntax: session =
db.getMongo().startSession()
- Transaktion starten,
Syntax: session.startTransaction()
- Transaktion festschreiben
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.
session1.startTransaction()
session2.startTransaction()
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.
- db.getMongo ().startTransaction ()
Führen Sie einige Einfügungen / Aktualisierungen für mehrere Dokumente durch
- Session.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
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.
- Profiling-Level 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
- Profilerstellungsstatus abrufen
Syntax: db.getProfilingStatus ()
> db.getProfilingStatus() { "was" : 2, "slowms" : 1, "sampleRate" : 1 }
- Um die Profilerstellung auf MongoDB-Instanzebene zu aktivieren, starten Sie die Instanz mit Profilerinformationen oder fügen Sie der Konfigurationsdatei Profilerdetails 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()
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.
- Verbinden Sie die Datenbank ohne Authentifizierung.
- Wechseln Sie zur Datenbank
use admin
- Erstellen Sie einen Benutzer wie unten
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" ] }
- Wiederaufnahme
mongod
Instanz - Zugriff erneut mit erstelltem Benutzer und Passwort.
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.
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. Gewähren Sie benutzerdefinierte Rollen
MongoDB bietet db.createRole()
Methode zum Angeben der Berechtigungen für einen Benutzer und ein Array geerbter Rollen.
- Verbinden Sie die MongoDB-Instanz mit dem Administrator.
- Führen Sie den folgenden Befehl aus, um eine neue Rolle zu generieren.
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.