今天的新知识

我今天做的第一件事就是复习一下我的 mongodb 知识,因为它是我高级 Web 开发课程的重要组成部分。我今天学到的关键概念是:
MongoDB 上的简单 CURD 操作
插入单个文档 --> **db.collection.insertOne()**;
插入多个文档 --> **db.collection.insertMeny()**;
查找单个文档 --> **db.collection.findOne()**;
查找多个文档 --> **db.collection.find()**;
更新单个文档 --> **db.collection.updateOne()**;
更新多个文档 --> **db.collection.updateMeny()**;
删除单个文档 --> **db.collection.deleteOne()**;
删除多个文档 --> **db.collection.deleteMany()**;
MongoDB 比较运算符
MongoDB 比较运算符允许您通过比较字段值来过滤文档。
`$eq:` 匹配等于指定值的值。
`$ne:` 匹配不等于指定值的值。
`$gt:` 匹配大于指定值的值。
`$gte:` 匹配大于或等于指定值的值。
`$lt:` 匹配小于指定值的值。
`$lte:` 匹配小于或等于指定值的值。
`$in:` 匹配数组中指定的任何值。
`$nin:` 不匹配数组中指定的任何值。
假设我们有一个名为用户的集合,其文档结构如下:
{ "_id": 1, "name": "Alice", "age": 25, "status": "A" } { "_id": 2, "name": "Bob", "age": 30, "status": "B" } { "_id": 3, "name": "Charlie", "age": 35, "status": "A" } { "_id": 4, "name": "David", "age": 28, "status": "C" } { "_id": 5, "name": "Eve", "age": 40, "status": "B" } { "_id": 6, "name": "Frank", "age": 22, "status": "A" }
现在,让我们进行一个显示每个比较运算符的查询。
//method one db.users.find({ $and: [ // Find documents where "age" is exactly 25 { age: { $eq: 25 } }, // and where "age" is NOT 30 { age: { $ne: 30 } }, // and where "age" is greater than 20 { age: { $gt: 20 } }, // and where "age" is 25 or higher { age: { $gte: 25 } }, // and where "age" is less than 40 { age: { $lt: 40 } }, // and where "age" is 35 or lower { age: { $lte: 35 } }, // and where "status" is either "A" or "B" { status: { $in: ["A", "B"] } }, // and where "status" is NOT "C" or "D" { status: { $nin: ["C", "D"] } } ] }) //method two db.users.find({age: {$eq:25, $ne:30, $gt: 20, $gte: 25, $lt:40, $lte: 35}, status:{$in:["A", "B"], $nin:["C","D"]} }) //output: { "_id": 1, "name": "Alice", "age": 25, "status": "A" }
方法一是显式“与”方法
方法二是隐式“and”方法
MongoDB 的逻辑运算符
MongoDB 的逻辑运算符允许您组合和操作查询中的条件。
MongoDB 中的 `$and` 运算符允许您在单个查询中组合多个条件。
MongoDB 中的 `$or` 运算符允许您返回满足至少一个条件的文档。
MongoDB 中的 `$nor` 运算符允许您返回不符合指定条件的文档。
MongoDB 中的 `$not` 运算符反转条件的效果,返回与指定条件不匹配的文档。
现在,让我们进行一个显示每个逻辑运算符的查询。
db.users.find({ $and: [ { $or: [{ status: "A" }, { age: { $lt: 25 } }] }, { age: { $gt: 20 } }, { age: { $not: { $gt: 35 } } }, { $nor: [{ status: "B" }, { age: 30 }] } ] }) //output { "_id": 1, "name": "Alice", "age": 24, "status": "A" } { "_id": 3, "name": "Charlie", "age": 28, "status": "A" } { "_id": 6, "name": "Frank", "age": 22, "status": "A" }
MongoDB 的元素运算符
`$exists`:检查文档中是否存在某个字段。
`$type`:检查文档中是否存在所提到的类型。
现在,让我们进行一个显示每个逻辑运算符的查询。
db.users.find({ "age": { $type: "int" } }) db.users.find({ "status": { $exists: true } }) //output [ { "_id": 1, "name": "Alice", "age": 25, "status": "A" }, { "_id": 2, "name": "Bob", "age": 30, "status": "B" }, { "_id": 3, "name": "Charlie", "age": 35, "status": "A" }, { "_id": 4, "name": "David", "age": 28, "status": "C" }, { "_id": 5, "name": "Eve", "age": 40, "status": "B" }, { "_id": 6, "name": "Frank", "age": 22, "status": "A" } ]
MongoDB 的数组运算符
`$all`:匹配包含所有指定元素的数组。
`$elemMatch`:根据指定的标准匹配数组内的元素。
`$size`:匹配具有指定数量元素的数组。
假设我们有一个名为 students 的集合,其文档结构如下:
[ { "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] }, { "_id": 2, "name": "Bob", "grades": [78, 80, 85], "subjects": ["Math", "Science", "English"] }, { "_id": 3, "name": "Charlie", "grades": [95, 98, 93], "subjects": ["Math", "History"] }, { "_id": 4, "name": "David", "grades": [60, 70, 68], "subjects": ["Math", "Science"] } ]
现在,让我们进行一个显示每个数组运算符的查询。
db.students.find({ "grades": { $elemMatch: { $gt: 90 } } }) //output [ { "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] }, { "_id": 3, "name": "Charlie", "grades": [95, 98, 93], "subjects": ["Math", "History"] } ] db.students.find({ "subjects": { $size: 3 } }) //output [ { "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] }, { "_id": 2, "name": "Bob", "grades": [78, 80, 85], "subjects": ["Math", "Science", "English"] } ] db.students.find({ "subjects": { $all: ["Math", "History"] } }) //output [ { "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History"] }, { "_id": 3, "name": "Charlie", "grades": [95, 98, 93], "subjects": ["Math", "History"] } ]
这些运算符在数组和对象填充的情况下很有用
MongoDB 的更新运算符
MongoDB 提供了几个更新操作符,允许您修改集合中的现有文档。
`$set`:用于更新字段的值。如果该字段不存在,则会创建它。
`$unset`:用于从文档中删除字段。
`$addToSet`:仅当值在数组中尚不存在时才将值添加到数组中(类似于集合)。
`$push`:向数组字段添加值。如果该字段不存在,则将其创建为数组。
`$each`:运算符与 `$push` 和 `$addToSet` 运算符结合使用,在单个更新操作中向数组字段添加多个元素。
`$pop`:删除数组的第一个或最后一个元素。1 用于删除最后一个元素,-1 用于删除第一个元素。
`$pull`:从数组中删除符合指定条件的值的所有实例。
`$pullAll`:运算符用于从数组字段中删除多个特定值。
`$rename`:重命名文档中的字段。
现在,让我们进行一个显示每个更新操作符的查询。
db.students.updateOne( { "_id": 2 },{ $set: { "graduated": false } } ) //output { "_id": 2, "name": "Bob", "grades": [78, 80, 85], "subjects": ["Math", "Science", "English"], "graduated": false }, db.students.updateOne( { "_id": 2 }, { $unset: { "subjects": "" }} ) //output { "_id": 2, "name": "Bob", "grades": [78, 80, 85], "graduated": false }, db.students.updateOne( { "_id": 2 }, { $addToSet: { "subjects": "Geography" }} ) //output { "_id": 1, "name": "Alice", "grades": [85, 90, 92], "subjects": ["Math", "English", "History","Geography"] }, db.students.updateOne( { "_id": 1 }, { $push: { "grades": 88 }} ) //output { "_id": 1, "name": "Alice", "grades": [85, 90, 92, 88], "subjects": ["Math", "English", "History","Geography"] } db.students.updateOne( { "_id": 1 }, { $push: { "grades": { $each: [ 91, 82] }}} ) //output { "_id": 1, "name": "Alice", "grades": [85, 90, 92, 88, 91, 82], "subjects": ["Math", "English", "History","Geography"] } db.students.updateOne( { "_id": 1 },{ $pop: { "grades": 1 } // 1 for the last element, -1 for the first element } ) //output { "_id": 1, "name": "Alice", "grades": [85, 90, 92, 88, 91], "subjects": ["Math", "English", "History","Geography"] } db.students.updateOne( { "_id": 1 },{ $pull: { "grades": 90 }} ) //output { "_id": 1, "name": "Alice", "grades": [85, 92, 88, 91], "subjects": ["Math", "English", "History","Geography"] } db.students.updateOne( { "_id": 1 }, { $pullAll: { "grades": [80, 92] }} ) //output { "_id": 1, "name": "Alice", "grades": [85, 88, 91], "subjects": ["Math", "English", "History","Geography"] } db.students.updateOne( { "_id": 1 },{ $rename: { "name": "firstName" }} ) //output { "_id": 1, "firstName": "Alice", "grades": [85, 88, 91], "subjects": ["Math", "English", "History","Geography"] }