doc = { "name": "Smith", "age": 30, "profession": "hacker"}
db.people.insert(doc)
Retrouver un seul enregistrement dans la collection users où le username est "dwight". N'afficher que le champ email.
db.users.findOne({'username': "dwight"}, {'email': true, '_id':false})
Retrouver tous les documents de la collection scores de type essay et de score= 50. N'afficher que le champ student. db.scores.find( {type:"essay", score:50}, {student:true, _id:false})
Retrouver les scores compris entre 50 et 60 inclus.
db.scores.find({ score:{$gte: 50, $lte: 60} })
Retrouver les noms compris entre A et B Inclus. (Attention MongoDB est case sensitive) db.scores.find({ name:{$gte: "A", $lt: "C"} })
Retourne les documents de la collection users pour les-quel le type du champ name est un String (cf $type)
db.users.find( {name: {$type: 2}} )
Retrouve les documents de la collection users pour les-quels le name contient "q" et a un champ email
db.users.find( {name: {$regex: "q"}, email: {$exists: true} } )
Retrouve les documents de la collection scores où score est < 50 ou > 90
db.scores.find({$or: [{score: {$lt: 50}}, {score: {$gt: 90}}]})
$all permet de retourner les documents dont le champ friends contient "Joe" et "Bob". $in permet de retourner les documents dont le champ favorites contient "running" ou "pickles"
>>> db.users.find( { friends : { $all : [ "Joe" , "Bob" ] }, favorites : { $in : [ "running" , "pickles" ] } } )
{ name : "Cliff" , friends : [ "Pete" , "Joe" , "Tom" , "Bob" ] , favorites : [ "pickles", "cycling" ] }
Retrouve les personnes de type masculin par nom en ordre décroissant. Passe les 2 premiers et affiche les 5 suivants
db.people.find({type: "masculin"}).sort({name: -1}).limit(5).skip(2)
Compte le nombre de document dont le type est un essay et le score superieur à 90
db.scores.count({type: "essay", "score": {$gt: 90}})
{ "_id" : "Texas", "population" : 2500000, "land_locked" : 1 }
>>> db.foo.update({_id:"Texas"},{population:30000000})
{ "_id" : "Texas", "population" : 30000000 } # /!\ Le reste du document est modifié/supprimé
{ "_id" : "myrnarackham", "phone" : "301-512-7434", "country" : "US", "count": 1 }
>>> db.users.update({ _id: "myrnarackham" }, { $set: {country: "RU"} })
{ "_id" : "myrnarackham", "phone" : "301-512-7434", "country" : "RU", "count": 1 }
>>> db.users.update({ _id: "myrnarackham" }, { $inc: {count: 2} })
{ "_id" : "myrnarackham", "phone" : "301-512-7434", "country" : "RU", "count": 3 }
{ "_id" : "jimmy" , "favorite_color" : "blue" , "interests" : [ "debating" , "politics" ] }
>>> db.users.update({_id: "jimmy"}, {$unset: {interests: 1}})
{ "_id" : "jimmy" , "favorite_color" : "blue" }
{ _id : "Mike", interests : [ "chess", "botany" ] }
>>> db.friends.update( { _id : "Mike" }, { $push : { interests : "skydiving" } } );
{ _id : "Mike", interests : [ "chess", "botany", "skydiving" ] }
>>> db.friends.update( { _id : "Mike" }, { $pop : { interests : -1 } } );
{ _id : "Mike", interests : [ "botany", "skydiving" ] }
>>> db.friends.update( { _id : "Mike" }, { $addToSet : { interests : "skydiving" } } );
{ _id : "Mike", interests : [ "botany", "skydiving" ] }
>>> db.friends.update( { _id : "Mike" }, { $pushAll: { interests : [ "skydiving" , "skiing" ] } } );
{ _id : "Mike", interests : [ "botany", "skydiving", "skydiving", "skiing" ] }
Argument utilisé pour informer qu'un update permet l'enregistrement si non existant
>>> db.foo.update({username:'bar'}, {'$set':{'interests':['cat', 'dog']}}, {upsert: true} );
{ "_id" : ObjectId("507b78232e8dfde94c149949"), "interests" : [ "cat", "dog" ], "username" : "bar" }
Affecte plusieurs documents d'un coup
>>> db.scores.update({ score: {$lt: 70}}, {$inc: {score: 20} }, {multi: true})
# Augmente de 20 le score de tous les document dont le score est < 70
>>> db.scores.remove({ score: {$lt: 60}})
# supprime tous les documents dont le score est < 60
>>> db.scores.drop()
# supprme tous les enregistrement (mieux que db.score.remove())
>>> dp.runCommand( { getLastError: 1 })
(permet d'augmenter considérablement la vitesse d'accès)
Indexer une collection sur une clé ascendante et une autre descendante
>>> db.students.ensureIndex({ 'student_id':1, 'class':-1 })
Indexer une clé unique
>>> db.students.ensureIndex({ 'name': 1 }, { 'unique': true })
Supprime les documents en conflit
>>> db.students.ensureIndex({ 'name': 1 }, { 'unique': true, 'dropDup': true })
Permet d'indexer une collection sans tenir compte des champs n’existant pas.
{ "_id" : ObjectId("50a464fb0a9dfcc4f19d6271"), "name" : "Andrew", "title" : "Jester" }
{ "_id" : ObjectId("50a4650c0a9dfcc4f19d6272"), "name" : "Dwight", "title" : "CEO" }
{ "_id" : ObjectId("50a465280a9dfcc4f19d6273"), "name" : "John" }
>>> db.people.ensureIndex({title:1}, {sparse:1})
>>> db.people.find({title:null})
Cette requête ne va retourner aucun enregistrement car il n'y a aucun title:null
>>> db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "school.students", "name" : "_id_" }
{ "v" : 1, "key" : { "student_id" : 1, "class" : -1 }, "ns" : "school.students", "name" : "student_id_1_class_-1" }
Affiche les index de la collection
>>> db.students.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "school.students",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"student_id" : 1,
"class" : -1
},
"ns" : "school.students",
"name" : "student_id_1_class_-1"
}
]
Supprime un index de la collection
>>> db.posts.dropIndex({'tags':1})
{ "nIndexesWas" : 4, "ok" : 1 }
Affiche le résultat de la requête en expliquant si oui ou non les index ont été utilisés et si oui, comment.
{
"cursor" : "BtreeCursor _id_",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"start" : {
"_id" : 0
},
"end" : {
"_id" : 0
}
},
"server" : "alain-p6715fr:27017"
}
Permet de choisir l'index utilisé lors de la requête.
Par exemple ici, la requête retourne tous les documents car on force l'utilisation de l'index naturel. Si l'on
avait laissé l'utilisation de l'index title, la requête n'aurait pas retourné les documents sans titre.
>>> db.people.find().sort({'title':1}).hint({$natural:1})
doc = foo.find(query).hint([('c', pymongo.ASCENDING)]).explain()
## Profiling Voir le trafic de la BD. Il y a 3 niveaux disponibles : 0 (off), 1 (slow query), 2 (all).
>>> db.getProfilingLevel()
0
>>> db.setProfilingLevel(1, 1)
{ "was" : 0, "slowms" : 100, "ok" : 1 }
>>> db.getProfilingLevel()
{ "was" : 1, "slowms" : 1 }
>>> use blog
switched to db blog
>>> db.dropDatabase();
{ "dropped" : "blog", "ok" : 1 }