今天的新知识

我今天做的第一件事就是复习一下我的 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"] }