// 2024_4_17.js // Mongosh mongosh.exe // Set up toyu DB in Mongo. mongorestore --archive="toyu-db.gz" --gzip --nsFrom='toyu.*' --nsTo='toyu.*' // [1] Show all students. use toyu db.student.find() // db.collection.find(query, projection, options) // Getting rid of _id: // query: {} // projection: { "_id": 0 } db.student.find({}, { "_id": 0 } ) db.student.find({}, { "_id": false } ) students = db.student.find({}, { "_id": false } ) // Show all information of students majoring in 'CINF'. // query: {"major": "CINF"} db.student.find({"major": "CINF"}, { "_id": 0 } ) // Show all student names. Return an array of student objects. db.student.find({}, { "fname": 1, "lname":1, "_id": 0 } ) db.student.find({"major": "CINF"}, { "fname": 1, "lname":1, "major": 1, "minor": 1, "_id": 0 } ) [4] Show all student names in this format: student #0: Tony Hawk student #1: Mary Hawk student #2: David Hawk student #3: Catherine Lim student #4: Larry Johnson student #5: Linda Johnson student #6: Lillian Johnson student #7: Ben Zico student #8: Bill Ching student #9: Linda King Solution: result = db.student.find({}, { "fname": 1, "lname":1, "_id": 0 } ).toArray() // May not always work as toArray() returns a promise, // which may not be ready for use. result.forEach((x,i) => console.log('student #' + String(i) + ': ' + x["fname"] + ' ' + x["lname"])) result.forEach((x,i) => console.log('student #' + String(i+1) + ': ' + x["fname"] + ' ' + x["lname"])) result = db.student.find({"major": "CINF"}, { "fname": 1, "lname":1, "major": 1, "minor": 1, "_id": 0 } ).toArray() result.forEach((x,i) => console.log('student #' + String(i+1) + ': ' + x["fname"] + ' ' + x["lname"] + ' major in ' + x["major"])) // [5] Show the names and credits (ach) of students majoring in 'CSCI' and having 40 or more credits. db.student.find( { "major": "CSCI", "ach" : {$gte: 40} }, { "fname": 1, "lname":1, "ach":1, "_id": 0 } ) // [6] Show the first name and last name of students with a first name starting with a L or B, case insensitive. db.student.find( { "fname": { $regex: /^[lb]/, $options: "i" } }, { "fname": 1, "lname":1, "_id": 0 } ) // [7] Show the names and credits (ach) of students majoring in 'CSCI' and having 40 or more credits. db.student.find( { "$and": [ { "major": "CSCI"}, { "ach": {"$gte": 40}} ] }, { "fname": 1, "lname":1, "ach":1, "_id": 0 } ) //[9] Show the names of students who have enrolled in 10000: joining two document. This should have the similar effect of the SQL statement: SELECT DISTINCT s.fname, s.lname FROM student AS s, enroll AS e WHERE s.stuId = e.stuId AND e.classId = 10000; In MongoDB: db.student.aggregate([ {$lookup: { from: "enroll", let: {joinValue: '$stuId'}, pipeline: [ { $match: { $expr: { $and: [ { $eq: [ "$stuId", "$$joinValue" ] }, { $eq: [ "$classId", 10000 ] } ] } } } ], as: "enrollment" }}, { $match: {"enrollment": { $ne: [] }}}, { $project: { "fname": 1, "lname": 1, "_id": 0}} ]) use tinker db.test1.insertOne( { "StudentId" :1, "StudentName" : "Joseph Connor" } ) db.test1.find() db.test1.find({}, { _id: 0 })