MongoDB
Operacja CRUD
Szukaj…
Składnia
- wstaw ( dokument lub tablica dokumentów )
- insertOne („dokument”, {writeConcern: „dokument”})
- insertMany ({[dokument 1, dokument 2, ...]}, {writeConcern: dokument, zamówiony: boolean})
- znajdź ( zapytanie , rzut )
- findOne ( zapytanie , projekcja )
- aktualizacja ( zapytanie , aktualizacja )
- updateOne ( zapytanie , aktualizacja , {upsert: boolean, writeConcern: document})
- updateMany ( zapytanie , aktualizacja , {upsert: boolean, writeConcern: document})
- replaceOne ( zapytanie , zamiana , {upsert: boolean, writeConcern: document})
- usuń ( zapytanie , justOne )
- findAndModify ( zapytanie , sortowanie , aktualizacja , opcje [opcjonalnie] )
Uwagi
Aktualizowanie i usuwanie dokumentu należy wykonywać ostrożnie. Ponieważ operacja może mieć wpływ na wiele dokumentów.
Stwórz
db.people.insert({name: 'Tom', age: 28});
Lub
db.people.save({name: 'Tom', age: 28});
Różnica między save
polega na tym, że jeśli przekazany dokument zawiera pole _id
, jeśli dokument już istnieje z tym _id
, zostanie zaktualizowany zamiast dodawany jako nowy.
Dwie nowe metody wstawiania dokumentów do kolekcji w MongoDB 3.2.x: -
Użyj insertOne
aby wstawić tylko jeden rekord: -
db.people.insertOne({name: 'Tom', age: 28});
Użyj insertMany
aby wstawić wiele rekordów: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Zauważ, że insert
jest podświetlona jako przestarzała w każdym oficjalnym sterowniku języka od wersji 3.0. Całkowite rozróżnienie polega na tym, że metody powłoki faktycznie pozostawały w tyle za innymi sterownikami przy wdrażaniu metody. To samo dotyczy wszystkich innych metod CRUD
Aktualizacja
Zaktualizuj cały obiekt:
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.
Lub po prostu zaktualizuj pojedyncze pole dokumentu. W tym przypadku age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
Możesz także aktualizować wiele dokumentów jednocześnie, dodając trzeci parametr. To zapytanie zaktualizuje wszystkie dokumenty, których nazwa jest równa Tom
:
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.
Jeśli pojawi się nowe pole do aktualizacji, to pole zostanie dodane do dokumentu.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Jeśli konieczne jest zastąpienie dokumentu,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
może być użyte.
Uwaga : Pola używane do identyfikacji obiektu zostaną zapisane w zaktualizowanym dokumencie. Pole, które nie jest zdefiniowane w sekcji aktualizacji, zostanie usunięte z dokumentu.
Usunąć
Usuwa wszystkie dokumenty pasujące do parametru zapytania:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
Lub tylko jeden
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
Metoda remove()
MongoDB. Wykonanie tego polecenia bez żadnego argumentu lub bez pustego argumentu spowoduje usunięcie wszystkich dokumentów z kolekcji.
db.people.remove();
lub
db.people.remove({});
Czytać
Zapytanie do wszystkich dokumentów w kolekcji people
które mają pole name
o wartości 'Tom'
:
db.people.find({name: 'Tom'})
Lub tylko pierwszy:
db.people.findOne({name: 'Tom'})
Możesz także określić, które pola mają zostać zwrócone, przekazując parametr wyboru pola. Poniższe wyklucza pole _id
i obejmuje tylko pole age
:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Uwaga: domyślnie pole _id
zostanie zwrócone, nawet jeśli go nie poprosisz. Jeśli nie chcesz, aby uzyskać _id
plecami, wystarczy postępować zgodnie z poprzedniego przykładu i poprosić o _id
zostać wyłączone poprzez określenie _id: 0
(lub _id: false
) .Jeżeli chcesz znaleźć zapis sub jak obiekt zawiera adres kraj , miasto itp.
db.people.find({'address.country': 'US'})
i w razie potrzeby podaj również pole
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()
Więcej operatorów aktualizacji
Podczas aktualizacji dokumentu możesz używać innych operatorów oprócz $set
. Operator $push
pozwala na wypchnięcie wartości do tablicy, w tym przypadku dodamy nowy pseudonim do tablicy nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
Operator $pull
jest przeciwieństwem $push
, możesz wyciągać określone elementy z tablic.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
Operator $pop
umożliwia usunięcie pierwszej lub ostatniej wartości z tablicy. Powiedzmy, że dokument Toma ma właściwość o nazwie rodzeństwo, która ma wartość ['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.
Parametr „multi” podczas aktualizacji wielu dokumentów
Aby zaktualizować wiele dokumentów w kolekcji, ustaw opcję multi na wartość true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
Multi jest opcjonalne. Jeśli ustawiona na wartość true, aktualizuje wiele dokumentów spełniających kryteria zapytania. Jeśli ustawione na false, aktualizuje jeden dokument. Wartość domyślna to false.
db.mycol.find () {„_id”: ObjectId (598354878df45ec5), „title”: „Omówienie MongoDB”} {„_id”: ObjectId (59835487adf45ec6), „title”: „Omówienie NoSQL”} {„_id”: ObjectId (59835487adf45ec7), „title”: „Omówienie punktów w samouczkach”}
db.mycol.update ({„title”: „Omówienie MongoDB”}, {$ set: {'title ”:„ Nowy samouczek MongoDB ”}}, {multi: true})
Aktualizacja osadzonych dokumentów.
Dla następującego schematu:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Zaktualizuj oceny Toma do 55, gdzie oceny wynoszą 50 (użyj operatora pozycyjnego $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Dla następującego schematu:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Zaktualizuj znaki Tom's English do 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Wyjaśnienie powyższego przykładu:
Używając {name: „Tom”, „marks.subject”: „English”} uzyskasz pozycję obiektu w tablicy znaczników, gdzie przedmiotem jest angielski. W „marks. $. Marks” $ służy do aktualizacji w tej pozycji tablicy znaczników
Zaktualizuj wartości w tablicy
Operator pozycyjny $ identyfikuje element w tablicy, który ma zostać zaktualizowany, bez wyraźnego określania pozycji elementu w tablicy.
Rozważ uczniów z następujących dokumentów:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Aby zaktualizować 80 do 82 w tablicy ocen w pierwszym dokumencie, użyj operatora pozycyjnego $, jeśli nie znasz pozycji elementu w tablicy:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)