MongoDB
CRUD-drift
Sök…
Syntax
- infoga ( dokument eller grupp av dokument )
- insertOne ('dokument', {writeConcern: 'document'})
- insertMany ({[document 1, document 2, ...]}, {writeConcern: document, order: boolean})
- hitta ( fråga , projektion )
- findOne ( fråga , projektion )
- uppdatering ( fråga , uppdatera )
- updateOne ( fråga , uppdatera , {upsert: boolean, writeConcern: document})
- updateMany ( fråga , uppdatera , {upsert: boolean, writeConcern: document})
- byt ut en ( fråga , ersättning , {upsert: boolean, writeConcern: document})
- ta bort ( fråga , justOne )
- findAndModify ( fråga , sortera , uppdatera , alternativ [valfritt] )
Anmärkningar
Uppdatering och radering av ett dokument bör göras noggrant. Eftersom drift kan påverka för flera dokument.
Skapa
db.people.insert({name: 'Tom', age: 28});
Eller
db.people.save({name: 'Tom', age: 28});
Skillnaden med save
är att om det godkända dokumentet innehåller ett _id
fält, om ett dokument redan finns med det _id
kommer det att uppdateras istället för att läggas till som nytt.
Två nya metoder för att infoga dokument i en samling i MongoDB 3.2.x: -
Använd insertOne
att bara infoga en post: -
db.people.insertOne({name: 'Tom', age: 28});
Använd insertMany
att infoga flera poster: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Observera att insert
markeras som föråldrad i alla officiella språkdrivrutiner sedan version 3.0. Den fulla distinktionen är att skalmetoderna faktiskt höll sig efter de andra förarna när de implementerade metoden. Samma sak gäller alla andra CRUD-metoder
Uppdatering
Uppdatera hela objektet:
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.
Eller bara uppdatera ett enda fält i ett dokument. I detta fall age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
Du kan också uppdatera flera dokument samtidigt genom att lägga till en tredje parameter. Denna fråga kommer att uppdatera alla dokument där namnet är lika med 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.
Om ett nytt fält kommer för uppdatering läggs det fältet till i dokumentet.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Om ett dokument behöver bytas ut,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
kan användas.
Obs : Fält som du använder för att identifiera objektet kommer att sparas i det uppdaterade dokumentet. Fält som inte definieras i uppdateringsavsnittet kommer att tas bort från dokumentet.
Radera
Tar bort alla dokument som matchar frågeparametern:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
Eller bara en
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
MongoDB: s metod för remove()
. Om du kör detta kommando utan några argument eller utan tomt argument kommer det att tas bort alla dokument från samlingen.
db.people.remove();
eller
db.people.remove({});
Läsa
Query för alla dokument i people
samling som har ett name
fält med ett värde på 'Tom'
:
db.people.find({name: 'Tom'})
Eller bara den första:
db.people.findOne({name: 'Tom'})
Du kan också ange vilka fält som ska returneras genom att passera en fältvalparameter. Följande kommer att utesluta _id
fält och endast omfattar age
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Obs! _id
standard _id
fältet _id
att returneras, även om du inte ber om det. Om du vill inte få tillbaka _id
kan du bara följa föregående exempel och be om att _id
ska uteslutas genom att ange _id: 0
(eller _id: false
). Om du vill hitta _id: false
innehåller land , stad, etc.
db.people.find({'address.country': 'US'})
& ange fält också om det behövs
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()
Fler uppdateringsoperatörer
Du kan använda andra operatörer förutom $set
när du uppdaterar ett dokument. Med $push
operatören kan du skjuta ett värde in i en matris, i detta fall lägger vi till ett nytt smeknamn till nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
$pull
operatören är motsatsen till $push
, du kan dra specifika objekt från matriser.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
Med $pop
operatören kan du ta bort det första eller det sista värdet från en matris. Låt oss säga Toms dokument har en egenskap som heter syskon som har värdet ['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 vid uppdatering av flera dokument
För att uppdatera flera dokument i en samling ställer du in multi-alternativet till true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi är valfritt. Om den är satt, uppdaterar du flera dokument som uppfyller frågekriterierna. Om det är inställt på falskt uppdaterar du ett dokument. Standardvärdet är falskt.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "MongoDB-översikt"} {"_id": ObjectId (59835487adf45ec6), "title": "NoSQL-översikt"} {"_id": ObjectId (59835487adf45ec7), "title": "Översikt över Tutorials Point"}
db.mycol.update ({'title': 'MongoDB-översikt'}, {$ set: {'title': 'New MongoDB Tutorial'}}, {multi: true})
Uppdatering av inbäddade dokument.
För följande schema:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Uppdatera Toms märken till 55 där markeringarna är 50 (Använd position operatören $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
För följande schema:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Uppdatera Toms engelska markeringar till 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Förklarande exempel ovan:
Genom att använda {name: "Tom", "marks.subject": "English"} får du objektets position i markeringsfältet, där ämnet är engelska. I "markeringar. $. Markeringar" används $ för att uppdatera i den positionen för markeringsfältet
Uppdatera värden i en matris
Positionerings $ -operatören identifierar ett element i en matris som ska uppdateras utan att uttryckligen ange positionen för elementet i arrayen.
Tänk på en samling studenter med följande dokument:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Om du vill uppdatera 80 till 82 i betygsuppsättningen i det första dokumentet använder du position $ $ om du inte vet elementets position i arrayen:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)