MongoDB
CRUD-Operation
Suche…
Syntax
- Einfügen ( Dokument oder Array von Dokumenten )
- insertOne ('document', {writeConcern: 'document'})
- insertMany ({[Dokument 1, Dokument 2, ...]}, {writeConcern: Dokument, sortiert: boolean})
- find ( Abfrage , Projektion )
- findOne ( Abfrage , Projektion )
- Update ( Abfrage , Update )
- updateOne ( Abfrage , Aktualisierung , {upsert: boolean, writeConcern: document})
- updateMany ( Abfrage , Aktualisierung , {upsert: boolean, writeConcern: document})
- replaceOne ( Abfrage , Ersetzung , {upsert: boolean, writeConcern: document})
- entfernen ( Abfrage , justOne )
- findAndModify ( Abfrage , Sortierung , Aktualisierung , Optionen [optional] )
Bemerkungen
Das Aktualisieren und Löschen eines Dokuments sollte sorgfältig durchgeführt werden. Da kann sich der Vorgang auf mehrere Dokumente auswirken.
Erstellen
db.people.insert({name: 'Tom', age: 28});
Oder
db.people.save({name: 'Tom', age: 28});
Der Unterschied zum save
ist, dass, wenn das übergebene Dokument ein _id
Feld enthält, wenn ein Dokument bereits mit dieser _id
es aktualisiert wird, anstatt als neu hinzugefügt zu werden.
Zwei neue Methoden zum Einfügen von Dokumenten in eine Sammlung in MongoDB 3.2.x: -
Verwenden Sie insertOne
, um nur einen Datensatz einzufügen: -
db.people.insertOne({name: 'Tom', age: 28});
Verwenden Sie insertMany
, um mehrere Datensätze einzufügen: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Beachten Sie, dass die insert
seit Version 3.0 in jedem offiziellen Sprachentreiber als veraltet markiert ist. Der volle Unterschied besteht darin, dass die Shell-Methoden bei der Implementierung der Methode tatsächlich hinter den anderen Treibern zurückgeblieben sind. Das gleiche gilt für alle anderen CRUD-Methoden
Aktualisieren
Aktualisieren Sie das gesamte Objekt:
db.people.update({name: 'Tom'}, {age: 29, name: 'Tom'})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace only first matching document.
db.people.updateMany({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace all matching documents.
Oder aktualisieren Sie einfach ein einzelnes Feld eines Dokuments. In diesem Fall age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
Sie können auch mehrere Dokumente gleichzeitig aktualisieren, indem Sie einen dritten Parameter hinzufügen. Diese Abfrage aktualisiert alle Dokumente, bei denen der Name Tom
entspricht:
db.people.update({name: 'Tom'}, {$set: {age: 29}}, {multi: true})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{$set:{age: 30}) //Will update only first matching document.
db.people.updateMany({name: 'Tom'},{$set:{age: 30}}) //Will update all matching documents.
Wenn ein neues Feld zur Aktualisierung erscheint, wird dieses Feld dem Dokument hinzugefügt.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Wenn ein Dokument ersetzt werden muss,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
kann verwendet werden.
Hinweis : Felder, die Sie zur Identifizierung des Objekts verwenden, werden im aktualisierten Dokument gespeichert. Felder, die nicht im Aktualisierungsabschnitt definiert sind, werden aus dem Dokument entfernt.
Löschen
Löscht alle Dokumente, die dem Abfrageparameter entsprechen:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
Oder nur eine
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
MongoDBs remove()
Methode. Wenn Sie diesen Befehl ohne ein Argument oder ohne ein leeres Argument ausführen, werden alle Dokumente aus der Sammlung entfernt.
db.people.remove();
oder
db.people.remove({});
Lesen
Abfrage für alle Dokumente in der people
Sammlung , die einen haben name
Feld mit einem Wert von 'Tom'
:
db.people.find({name: 'Tom'})
Oder nur der erste:
db.people.findOne({name: 'Tom'})
Sie können auch angeben, welche Felder zurückgegeben werden sollen, indem Sie einen Feldauswahlparameter übergeben. Folgendes schließt das _id
Feld aus und enthält nur das age
Feld:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Hinweis: Standardmäßig wird das Feld _id
zurückgegeben, auch wenn Sie nicht danach fragen. Wenn Sie die _id
zurückbekommen _id
, folgen Sie einfach dem vorherigen Beispiel und fordern Sie die _id
unter Angabe von _id: 0
(oder _id: false
) aus , Stadt usw.
db.people.find({'address.country': 'US'})
& bei Bedarf auch Feld angeben
db.people.find({'address.country': 'US'}, {'name': true, 'address.city': true})Remember that the result has a `.pretty()` method that pretty-prints resulting JSON:
db.people.find().pretty()
Weitere Update-Operatoren
Sie können bei der Aktualisierung eines Dokuments neben $set
andere Operatoren verwenden. Mit dem $push
Operator können Sie einen Wert in ein Array verschieben. In diesem Fall fügen Sie dem nicknames
Array einen neuen Kurznamen hinzu.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
Der $pull
Operator ist das Gegenteil von $push
. Sie können bestimmte Elemente aus Arrays ziehen.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
Mit dem Operator $pop
können Sie den ersten oder den letzten Wert aus einem Array entfernen. Angenommen, Toms Dokument hat eine Eigenschaft namens Geschwister, die den Wert ['Marie', 'Bob', 'Kevin', 'Alex']
.
db.people.update({name: 'Tom'}, {$pop: {siblings: -1}})
// This will remove the first value from the siblings array, which is 'Marie' in this case.
db.people.update({name: 'Tom'}, {$pop: {siblings: 1}})
// This will remove the last value from the siblings array, which is 'Alex' in this case.
"multi" Parameter beim Aktualisieren mehrerer Dokumente
Um mehrere Dokumente in einer Sammlung zu aktualisieren, setzen Sie die Multi-Option auf true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi ist optional. Wenn der Wert auf true gesetzt ist, werden mehrere Dokumente aktualisiert, die die Abfragekriterien erfüllen. Bei Festlegung auf "false" wird ein Dokument aktualisiert. Der Standardwert ist false.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "MongoDB Overview"} {"_id": ObjectId (59835487adf45ec6), "title": "NoSQL Overview"} {"_id": ObjectId (59835487adf45ec7), "title": "Übersicht über Lernprogramme"}
db.mycol.update ({'title': 'MongoDB Overview'}, {$ set: {'title': 'Neues MongoDB-Tutorial'}}, {multi: true})
Update eingebetteter Dokumente.
Für das folgende Schema:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Tom's Marken auf 55 aktualisieren, wobei Marken 50 sind (Verwenden Sie den Positionsoperator $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Für das folgende Schema:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Aktualisieren Sie die englischen Markierungen von Tom auf 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Erklärendes Beispiel oben:
Wenn Sie {name: "Tom", "marks.subject": "English"} verwenden, erhalten Sie die Position des Objekts im Markierungen-Array, wobei das Subjekt Englisch ist. In "marks. $. Marks" wird $ verwendet, um an dieser Position des Marken-Arrays zu aktualisieren
Werte in einem Array aktualisieren
Der positional $ -Operator identifiziert ein Element in einem Array, das aktualisiert werden soll, ohne die Position des Elements im Array explizit anzugeben.
Betrachten Sie eine Sammlung Schüler mit den folgenden Dokumenten:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Verwenden Sie zum Aktualisieren von 80 bis 82 im Notenarray im ersten Dokument den Operator positional $, wenn Sie die Position des Elements im Array nicht kennen:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)