MongoDB
CRUD-bewerking
Zoeken…
Syntaxis
- invoegen ( document of reeks documenten )
- insertOne ('document', {writeConcern: 'document'})
- insertMany ({[document 1, document 2, ...]}, {writeConcern: document, besteld: boolean})
- zoeken ( zoekopdracht , projectie )
- findOne ( query , projectie )
- update ( zoekopdracht , update )
- updateOne ( query , update , {upsert: boolean, writeConcern: document})
- updateMany ( query , update , {upsert: boolean, writeConcern: document})
- replaOne ( query , vervanger , {upsert: boolean, writeConcern: document})
- remove ( query , justOne )
- findAndModify ( zoeken , sorteren , bijwerken , opties [optioneel] )
Opmerkingen
Het bijwerken en verwijderen van een document moet zorgvuldig gebeuren. Aangezien de bewerking van invloed kan zijn op meerdere documenten.
creëren
db.people.insert({name: 'Tom', age: 28});
Of
db.people.save({name: 'Tom', age: 28});
Het verschil met save
is dat als het doorgegeven document een veld _id
bevat, als er al een document met dat _id
bestaat, het wordt bijgewerkt in plaats van dat het als nieuw wordt toegevoegd.
Twee nieuwe methoden om documenten in een verzameling in te voegen, in MongoDB 3.2.x: -
Gebruik insertOne
om slechts één record in te voegen: -
db.people.insertOne({name: 'Tom', age: 28});
Gebruik insertMany
om meerdere records in te voegen: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Merk op dat insert
gemarkeerd is als verouderd in elk officieel taalstuurprogramma sinds versie 3.0. Het volledige onderscheid is dat de shell-methoden eigenlijk achterbleven bij de andere stuurprogramma's bij de implementatie van de methode. Hetzelfde geldt voor alle andere CRUD-methoden
Bijwerken
Update het hele object:
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.
Of update gewoon een enkel veld van een document. In dit geval age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
U kunt ook meerdere documenten tegelijkertijd bijwerken door een derde parameter toe te voegen. Deze zoekopdracht werkt alle documenten bij waarvan de naam gelijk is aan 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.
Als er een nieuw veld komt voor update, wordt dat veld aan het document toegevoegd.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Als een document moet worden vervangen,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
kan worden gebruikt.
Opmerking : velden die u gebruikt om het object te identificeren, worden opgeslagen in het bijgewerkte document. Veld dat niet in de update-sectie is gedefinieerd, wordt uit het document verwijderd.
Delete
Hiermee verwijdert u alle documenten die overeenkomen met de parameter query:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
Of slechts een
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
De methode remove()
MongoDB. Als u deze opdracht zonder enig argument of zonder leeg argument uitvoert, worden alle documenten uit de verzameling verwijderd.
db.people.remove();
of
db.people.remove({});
Lezen
Query voor alle documenten in de people
collectie die een hebben name
veld met een waarde van 'Tom'
:
db.people.find({name: 'Tom'})
Of alleen de eerste:
db.people.findOne({name: 'Tom'})
U kunt ook opgeven welke velden moeten worden geretourneerd door een veldselectieparameter door te geven. Het volgende zal het veld _id
uitsluiten en alleen het veld age
:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Opmerking: standaard wordt het veld _id
geretourneerd, zelfs als u er niet om vraagt. Als u de _id
terug wilt krijgen, kunt u gewoon het vorige voorbeeld volgen en vragen om de _id
uit te sluiten door _id: 0
(of _id: false
) op te geven. Als u een _id: false
wilt vinden zoals _id: false
land bevat , stad, etc.
db.people.find({'address.country': 'US'})
& geef indien nodig ook een veld op
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()
Meer update-operators
U kunt naast $set
andere operators gebruiken bij het bijwerken van een document. Met de $push
operator kun je een waarde in een array pushen, in dit geval voegen we een nieuwe bijnaam toe aan de array met nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
De $pull
operator is het tegenovergestelde van $push
, u kunt specifieke items uit arrays halen.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
Met de $pop
operator kunt u de eerste of de laatste waarde uit een array verwijderen. Stel dat het document van Tom een eigenschap heeft met de naam broers en zussen die de waarde ['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 tijdens het bijwerken van meerdere documenten
Als u meerdere documenten in een verzameling wilt bijwerken, stelt u de multi-optie in op true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi is optioneel. Indien ingesteld op true, worden meerdere documenten bijgewerkt die voldoen aan de querycriteria. Indien ingesteld op false, wordt één document bijgewerkt. De standaardwaarde is false.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "MongoDB Overzicht"} {"_id": ObjectId (59835487adf45ec6), "title": "NoSQL Overzicht"} {"_id": ObjectId (59835487adf45ec7), "title": "Tutorials Puntoverzicht"}
db.mycol.update ({'title': 'MongoDB Overview'}, {$ set: {'title': 'New MongoDB Tutorial'}}, {multi: true})
Update van ingesloten documenten.
Voor het volgende schema:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Werk de markeringen van Tom bij naar 55 waar markeringen 50 zijn (gebruik de positionele operator $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Voor het volgende schema:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Update Tom's Engelse cijfers naar 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Uitleg van het bovenstaande voorbeeld:
Door {name: "Tom", "marks.subject": "English"} te gebruiken, krijgt u de positie van het object in de array met tekens, waarbij het onderwerp Engels is. In "markeringen. $. Markeringen" wordt $ gebruikt om in die positie van de reeks met markeringen bij te werken
Werk waarden in een array bij
De positionele $ operator identificeert een element in een array om bij te werken zonder expliciet de positie van het element in de array op te geven.
Overweeg een verzameling studenten met de volgende documenten:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Als u 80 tot 82 in de cijferreeks in het eerste document wilt bijwerken, gebruikt u de positionele $ -operator als u de positie van het element in de reeks niet kent:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)