MongoDB
Opération CRUD
Recherche…
Syntaxe
- insérer ( document ou tableau de documents )
- insertOne ('document', {writeConcern: 'document'})
- insertMany ({[document 1, document 2, ...]}, {writeConcern: document, ordonné: booléen})
- trouver ( requête , projection )
- findOne ( requête , projection )
- mise à jour ( requête , mise à jour )
- updateOne ( query , update , {upsert: boolean, writeConcern: document})
- updateMany ( requête , update , {upert: boolean, writeConcern: document})
- replaceOne ( requête , remplacement , {upsert: boolean, writeConcern: document})
- supprimer ( query , justOne )
- findAndModify ( requête , tri , mise à jour , options [facultatif] )
Remarques
La mise à jour et la suppression d'un document doivent être effectuées avec soin. Étant donné que l'opération peut affecter plusieurs documents.
Créer
db.people.insert({name: 'Tom', age: 28});
Ou
db.people.save({name: 'Tom', age: 28});
La différence avec save
est que si le document contient un passé _id
champ, si un document existe déjà avec cette _id
il sera mis à jour au lieu d'être ajouté comme nouveau.
Deux nouvelles méthodes pour insérer des documents dans une collection, dans MongoDB 3.2.x: -
Utilisez insertOne
pour insérer un seul enregistrement: -
db.people.insertOne({name: 'Tom', age: 28});
Utilisez insertMany
pour insérer plusieurs enregistrements: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Notez que l' insert
est mise en évidence comme obsolète dans chaque pilote de langue officielle depuis la version 3.0. La distinction complète est que les méthodes shell ont en fait pris du retard sur les autres pilotes dans la mise en œuvre de la méthode. La même chose s'applique à toutes les autres méthodes CRUD
Mettre à jour
Mettre à jour l'objet entier :
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.
Ou simplement mettre à jour un seul champ d'un document. Dans ce cas l' age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
Vous pouvez également mettre à jour plusieurs documents simultanément en ajoutant un troisième paramètre. Cette requête mettra à jour tous les documents dont le nom est égal à 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.
Si un nouveau champ est à venir pour la mise à jour, ce champ sera ajouté au document.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Si un document doit être remplacé,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
peut être utilisé.
Remarque : Les champs que vous utilisez pour identifier l'objet seront enregistrés dans le document mis à jour. Les champs non définis dans la section de mise à jour seront supprimés du document.
Effacer
Supprime tous les documents correspondant au paramètre de requête:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
Ou juste un
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
La méthode remove()
de MongoDB. Si vous exécutez cette commande sans argument ou sans argument vide, tous les documents seront supprimés de la collection.
db.people.remove();
ou
db.people.remove({});
Lis
Requête pour tous les documents de la collection de people
qui ont un champ de name
avec une valeur de 'Tom'
:
db.people.find({name: 'Tom'})
Ou juste le premier:
db.people.findOne({name: 'Tom'})
Vous pouvez également spécifier les champs à renvoyer en transmettant un paramètre de sélection de champ. Les éléments suivants excluront le champ _id
et incluront uniquement le champ age
:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Note: par défaut, le champ _id
sera retourné, même si vous ne le demandez pas. Si vous ne souhaitez pas récupérer l' _id
, vous pouvez simplement suivre l'exemple précédent et demander que l' _id
soit exclu en spécifiant _id: 0
(ou _id: false
). Si vous souhaitez trouver un sous-enregistrement comme l'adresse, l'objet contient le pays , ville, etc.
db.people.find({'address.country': 'US'})
& spécifier le champ si nécessaire
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()
Plus d'opérateurs de mise à jour
Vous pouvez utiliser d'autres opérateurs que $set
lors de la mise à jour d'un document. L'opérateur $push
vous permet de pousser une valeur dans un tableau, dans ce cas nous allons ajouter un nouveau surnom au tableau des nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
L'opérateur $pull
est l'opposé de $push
, vous pouvez extraire des éléments spécifiques des tableaux.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
L'opérateur $pop
vous permet de supprimer la première ou la dernière valeur d'un tableau. Disons que le document de Tom a une propriété appelée frères et sœurs qui a la valeur ['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.
Paramètre "multi" lors de la mise à jour de plusieurs documents
Pour mettre à jour plusieurs documents dans une collection, définissez l'option multi sur true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi est facultatif. Si défini sur true, met à jour plusieurs documents répondant aux critères de la requête. Si la valeur est false, met à jour un document. La valeur par défaut est false.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "Présentation de MongoDB"} {"_id": ObjectId (59835487adf45ec6), "title": "Présentation de NoSQL"} {"_id": ObjectId (59835487adf45ec7), "title": "Présentation du point de tutoriels"}
db.mycol.update ({'title': 'MongoDB Overview'}, {$ set: {'title': 'Nouveau tutoriel MongoDB'}}, {multi: true})
Mise à jour des documents incorporés.
Pour le schéma suivant:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Mettez à jour les marques de Tom à 55 où les marques sont 50 (utilisez l'opérateur de position $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Pour le schéma suivant:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Mettez à jour les marques anglaises de Tom à 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Expliquant l'exemple ci-dessus:
En utilisant {name: "Tom", "marks.subject": "English"}, vous obtiendrez la position de l'objet dans le tableau des marques, où sujet est l'anglais. Dans "marks. $. Marks", $ est utilisé pour mettre à jour dans cette position du tableau de marques
Mettre à jour les valeurs dans un tableau
L'opérateur positionnel $ identifie un élément dans un tableau à mettre à jour sans spécifier explicitement la position de l'élément dans le tableau.
Considérez une collection d'étudiants avec les documents suivants:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Pour mettre à jour 80 à 82 dans le tableau grades du premier document, utilisez l'opérateur positional $ si vous ne connaissez pas la position de l'élément dans le tableau:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)