print ("normal command to list databases"); printjson(db.adminCommand({listDatabases: 1 }) ); print (""); print ("Make variable saving the output."); db_list = db.adminCommand({listDatabases: 1 }); print (""); print ("Print out a better list of databases."); db_list['databases'].forEach( function(db) { print( "database: " + db.name ); } ) ; print (""); print ("Make database test1 if it does not exist."); db = db.getSiblingDB('test1'); print (""); db.testdoc.drop(); print (""); print ("create fuction to print out testdoc.") function print_test_doc() { print ("printing testdoc orders by color"); result = db.testdoc.find().sort({color : 1}) result.forEach( function(p) { print( "person: " + p.person + ", color : " + p.color + ", pencils : " + p.pencils );}); } print ("Insert two documents, create collection."); db.testdoc.insertOne({ person:"mark", color: "red", pencils : 10}); db.testdoc.insertOne({ person:"john", color: "blue", pencils : 20}); db.testdoc.insertOne({ person:"heidi", color: "purple", pencils : 30}); db.testdoc.insertOne({ person:"collin", color: "black", pencils : 40}); db.testdoc.insertOne({ person:"tristan", color: "red", pencils : 50}); print (""); print ("update one row, with UpdateOne, red to 100 pencils"); db.testdoc.updateOne({color:"red"}, { $set: { pencils: 100 }} ); print_test_doc() print (""); print ("update one row with update, red to 200 pecncils"); db.testdoc.update({color:"red"}, { $set: { pencils: 200 }}); print_test_doc() print (""); print ("update many rows, all red to 300 pencils"); db.testdoc.update({color:"red"}, { $set: { pencils:300 }}, {multi : 1 }); print_test_doc() print (""); print ("removes john"); db.testdoc.findAndModify({query : {person:"john"}, remove: 1 }); print_test_doc() print (""); print ("adds john with findAndModify"); db.testdoc.findAndModify({query : {person : "john"}, update : { person : "john", color: "blue", pencils : 20}, upsert: true }); print_test_doc() print (""); print ("adds john2 with update"); db.testdoc.update({person : "john2"}, {$set : {color: "blue", pencils : 400} } , {upsert: true }); print_test_doc() print (""); print ("increment pencils for all by 2, with update"); db.testdoc.update({}, { $inc: { pencils: 2 }}, {multi : 1}); print_test_doc() print (""); print ("increment pencils for all by 3, with updateMany"); db.testdoc.updateMany({}, { $inc: { pencils: 3 }}); print_test_doc() print (""); print ("Add 5 doc we will delete later."); db.testdoc.insertOne({ person:"d1", color: "black", pencils : -5}); db.testdoc.insertOne({ person:"d2", color: "black", pencils : -4}); db.testdoc.insertOne({ person:"d3", color: "black", pencils : -3}); db.testdoc.insertOne({ person:"d4", color: "black", pencils : -2}); db.testdoc.insertOne({ person:"d5", color: "black", pencils : -1}); print_test_doc() print (""); print ("delete on doc with color black with deleteOne."); db.testdoc.deleteOne({ color : "black"}); print_test_doc() print (""); print ("delete all with pencils less than -2 with deleteMany."); db.testdoc.deleteMany({ pencils : { $lt : 0}}); print_test_doc() print (""); print ("insert person with a color array"); db.testdoc.insertOne({ person:"colors1", color: ["red", 'white'], pencils : 500}); print_test_doc() print (""); print ("print out people with color red, scalar or in array"); result = db.testdoc.find({color: 'red'}).sort({color : 1}) result.forEach( function(p) { print( "person: " + p.person + ", color : " + p.color + ", pencils : " + p.pencils );}); print (""); print ("print out people with color red or blue, using array"); result = db.testdoc.find({color: { $in : ['blue', 'red']}}).sort({color : 1}) result.forEach( function(p) { print( "person: " + p.person + ", color : " + p.color + ", pencils : " + p.pencils );}); print (""); print ("print out people with color red or blue, using or"); result = db.testdoc.find({ $or : [ {color : 'blue'},{ color : 'red' }]}).sort({color : 1}) result.forEach( function(p) { print( "person: " + p.person + ", color : " + p.color + ", pencils : " + p.pencils );}); print (""); print ("print out people with color red, just the name"); result = db.testdoc.find({color : 'red'},{_id : 0, person : 1} ).sort({color : 1}) print(result) print (""); print ("print out people with color red, but the color field, by excluding color, limit 1"); result = db.testdoc.find({color : 'red'}, {color : 0} ).sort({color : 1}).limit(1) print(result) print (""); print ("print out people with color red, but the color field, by including fields only, limit 1"); result = db.testdoc.find({color : 'red'}, {person : 1, pencils : 1} ).sort({color : 1}).limit(1) print(result) print (""); print ("print out numberdocuments with color red, using countDocuments"); result = db.testdoc.countDocuments({color : 'red'}) print(result) print (""); print ("print out numberdocuments with color red, using find and count"); result = db.testdoc.find({color : 'red'}).count() print(result) print (""); print ("print out no of red and blue pencils"); result = db.testdoc.aggregate([ {$match : {color : { $in : ['red', 'blue'] }}}, {$group : { _id : { c : '$color'} , p : {$sum : "$pencils"}}} ]) print(result) print (""); print ("print out no of red and blue pencils, sort highest penci;s and limit by 1, by aggregate"); result = db.testdoc.aggregate([ {$match : {color : { $in : ['red', 'blue'] }}}, {$group : { _id : { c : '$color'} , p : {$sum : "$pencils"}}}, {$sort : {p : -1}}, {$limit: 1},{$project : {_id : 0, p : 1, color : "$_id.c"}}]) print(result) db.temp1.drop() db.temp2.drop() print (""); print ("print out no of red and blue pencils, sort highest pencils and limit by 1, by aggregate, but use find, sort, and limit separately"); result1 = db.testdoc.find({ color : { $in : ['red', 'blue'] } }).toArray() db.temp1.insertMany( result1 ) result2 = db.temp1.aggregate([ {$group : { _id : { c : '$color'} , p : {$sum : "$pencils"} }}, {$project : {_id : 0, p : 1, color : "$_id.c"}} ]).toArray() db.temp2.insertMany(result2 ) result3 = db.temp2.find({}, {_id:0}).sort({p : -1}).limit(1) print(result3) db.temp1.drop() db.temp2.drop() print (""); print ("same as before, but use out in pipline to make temp document"); result1 = db.testdoc.find({ color : { $in : ['red', 'blue'] } }).toArray() db.temp1.insertMany( result1 ) db.temp1.aggregate([ {$group : { _id : { c : '$color'} , p : {$sum : "$pencils"} }}, {$project : {_id : 0, p : 1, color : "$_id.c"}}, {$out : "temp2"} ]) result3 = db.temp2.find({}, {_id:0}).sort({p : -1}).limit(1) print(result3) print ("") print ("Itentionally make an error. ") try{ result4 = result1.aggregate([ {$group : { _id : { c : '$color'}, p : {$sum : "$pencils"} }} ]) } catch (err) { print ("ERRROR: can't treat results like a document. It has no functions. Save to document first") } print ("") print ("Make index, view indexes, run find, view plan of query ") db.testdoc.createIndex({person : 1, color : 1}) db.testdoc.insertOne({ person:"john", color: "blue", pencils : 21}); result = db.testdoc.find({person : "john"}).sort({color : 1}) print (result) result = db.textdoc.explain().find({person : "john"}).sort({color : 1}) print (result) print ("") print ("explain without using any indexes") result = db.testdoc.explain().find({pencils : {$gte : 300 }}).sort({color : 1}) print (result) print ("") print ("explain with sort outside of index") result = db.testdoc.explain().find({person : "john"}).sort({pencils : 1}) print (result) print ("") print ("view indexes, then drop, then view, create, view, drop again, view.") result = db.testdoc.getIndexes() print (result) // key: { person: 1, color: 1 }, name: 'person_1_color_1' db.testdoc.dropIndex({ person: 1, color: 1 }) result = db.testdoc.getIndexes() print (result) db.testdoc.createIndex({person : 1, color : 1}) result = db.testdoc.getIndexes() print (result) db.testdoc.dropIndex('person_1_color_1') result = db.testdoc.getIndexes() print (result) print ("") print ("create index on array and search it.") db.testdoc.insertOne({ person:"array1", color: "blue", pencils : 21, a :[1,2,3,4]}); db.testdoc.insertOne({ person:"array2", color: "blue", pencils : 21, a : [4,5,6,7]}); db.testdoc.createIndex({a : 1}) result = db.testdoc.aggregate([ {$match : {a : 1}},{$project : {_id : 0, person : 1, a : "$a"}}]) print(result) result = db.testdoc.aggregate([ {$match : {a : 4}},{$project : {_id : 0, person : 4, a : "$a"}}]) print(result)