MongoDB
Operazione CRUD
Ricerca…
Sintassi
- inserire ( documento o serie di documenti )
- insertOne ('document', {writeConcern: 'document'}})
- insertMany ({[documento 1, documento 2, ...]}, {writeConcern: documento, ordinato: booleano})
- trova ( query , proiezione )
- findOne ( query , proiezione )
- aggiornamento ( query , aggiornamento )
- updateOne ( query , aggiornamento , {upsert: boolean, writeConcern: document})
- updateMany ( query , aggiornamento , {upsert: boolean, writeConcern: document})
- replaceOne ( query , replacement , {upsert: boolean, writeConcern: document})
- rimuovere ( query , justOne )
- findAndModify ( query , ordinamento , aggiornamento , opzioni [facoltativo] )
Osservazioni
L'aggiornamento e l'eliminazione di un documento dovrebbero essere eseguiti con attenzione. Poiché l'operazione potrebbe influire su più documenti.
Creare
db.people.insert({name: 'Tom', age: 28});
O
db.people.save({name: 'Tom', age: 28});
La differenza con save
è che se il documento passato contiene un campo _id
, se esiste già un documento con tale _id
verrà aggiornato invece di essere aggiunto come nuovo.
Due nuovi metodi per inserire documenti in una raccolta, in MongoDB 3.2.x: -
Usa insertOne
per inserire solo un record: -
db.people.insertOne({name: 'Tom', age: 28});
Utilizzare insertMany
per inserire più record: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Si noti che l' insert
è evidenziato come deprecato in ogni driver di lingua ufficiale dalla versione 3.0. La distinzione principale è che i metodi di shell sono rimasti indietro rispetto agli altri driver nell'implementazione del metodo. La stessa cosa vale per tutti gli altri metodi CRUD
Aggiornare
Aggiorna l' intero oggetto:
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.
O semplicemente aggiorna un singolo campo di un documento. In questo caso l' age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
È inoltre possibile aggiornare più documenti contemporaneamente aggiungendo un terzo parametro. Questa query aggiornerà tutti i documenti in cui il nome è uguale a 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.
Se un nuovo campo è in arrivo per l'aggiornamento, quel campo verrà aggiunto al documento.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Se è necessario sostituire un documento,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
può essere utilizzato.
Nota : i campi che utilizzi per identificare l'oggetto verranno salvati nel documento aggiornato. I campi che non sono definiti nella sezione di aggiornamento verranno rimossi dal documento.
Elimina
Elimina tutti i documenti che corrispondono al parametro di query:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
O solo uno
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
Il metodo remove()
di MongoDB. Se si esegue questo comando senza alcun argomento o senza argomenti vuoti, verranno rimossi tutti i documenti dalla raccolta.
db.people.remove();
o
db.people.remove({});
Leggere
Query per tutti i documenti nella raccolta people
che hanno un campo name
con un valore di 'Tom'
:
db.people.find({name: 'Tom'})
O solo il primo:
db.people.findOne({name: 'Tom'})
È inoltre possibile specificare quali campi restituire passando un parametro di selezione campo. Quanto segue esclude il campo _id
e include solo il campo age
:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Nota: per impostazione predefinita, verrà restituito il campo _id
, anche se non lo chiedi. Se si desidera di non ottenere il _id
indietro, si può solo seguire l'esempio precedente e chiedere il _id
da escludere specificando _id: 0
(o _id: false
) .Se si desidera trovare record di sub come oggetto l'indirizzo contiene paese , città, ecc.
db.people.find({'address.country': 'US'})
e specificare il campo anche se richiesto
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()
Altri operatori di aggiornamento
Puoi utilizzare altri operatori oltre a $set
durante l'aggiornamento di un documento. L'operatore $push
ti consente di inserire un valore in un array, in questo caso aggiungeremo un nuovo nickname alla matrice dei nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
L'operatore $pull
è l'opposto di $push
, puoi estrarre elementi specifici dagli array.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
L'operatore $pop
consente di rimuovere il primo o l'ultimo valore da un array. Diciamo che il documento di Tom ha una proprietà chiamata fratelli che ha il valore ['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" Parametro durante l'aggiornamento di più documenti
Per aggiornare più documenti in una raccolta, impostare l'opzione multipla su true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi è facoltativo. Se impostato su true, aggiorna più documenti che soddisfano i criteri di query. Se impostato su false, aggiorna un documento. Il valore predefinito è falso.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "Panoramica di MongoDB"} {"_id": ObjectId (59835487adf45ec6), "title": "Panoramica NoSQL"} {"_id": ObjectId (59835487adf45ec7), "title": "Panoramica dei punti tutorial"}
db.mycol.update ({'title': 'MongoDB Overview'}, {$ set: {'title': 'New MongoDB Tutorial'}}, {multi: true})
Aggiornamento di documenti incorporati.
Per il seguente schema:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Aggiorna i marchi di Tom a 55 dove i voti sono 50 (usa l'operatore posizionale $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Per il seguente schema:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Aggiorna i marchi inglesi di Tom a 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Spiegando sopra l'esempio:
Usando {name: "Tom", "marks.subject": "English"} otterrai la posizione dell'oggetto nell'array dei marchi, dove il soggetto è l'inglese. In "marks. $. Marks", $ viene utilizzato per aggiornare in quella posizione dell'array Mark
Aggiorna valori in una matrice
L'operatore $ posizionale identifica un elemento in una matrice da aggiornare senza specificare esplicitamente la posizione dell'elemento nella matrice.
Considera una raccolta studenti con i seguenti documenti:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Per aggiornare da 80 a 82 nella matrice gradi nel primo documento, utilizzare l'operatore $ posizionale se non si conosce la posizione dell'elemento nell'array:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)