MongoDB数据库介绍
MongoDB是一个基于文档的NoSQL数据库,它以灵活的文档模型存储数据,非常适合现代应用程序的需求。
- MongoDB 提供多种语言的驱动程序,包括Python、Java、C#、Node.js等。
- 是一个基于分布式文件存储的开源数据库系统。
- 将数据存储为BSON(二进制JSON)文档,这些文档可以包含复杂的数据类型,如数组、对象等。
1.用户与权限管理
- 示例:在
admin
数据库中创建一个具有root
角色的用户admin
。use admin db.createUser({ user: "admin", pwd: "admin123456", roles: [{ role: "root", db: "admin" }] })
2.数据库与集合操作
- 创建数据库:通常用use指令创建一个数据库。
- 删除数据库:使用
db.dropDatabase()
删除当前数据库。 - 创建集合:使用
db.createCollection()
方法,如果集合已存在,则无反应。 - 删除集合:使用
db.collection.drop()
删除指定集合。
3.数据操作
1.增添数据
db.[collection_name].insert({字段: 值, 字段: 值})
- 使用
insertOne()
插入单条数据。 - 使用
insertMany()
插入多条数据。 - 注:如果集合不存在,则自动创建集合
示例: 向列表中增添新的学生信息
db.student.insertOne({name: 'jackeylove', age: 30})
db.student.insertMany([{name: '张三', age: 30}, {name: '李四', age: 19}])
2.删除数据
-
db.teacher.remove({})
-
使用
deleteOne()
、deleteMany()
方法删除数据。
db.student.remove({字段: "值", 字段: "值"})
3.更改数据
函数 find()
可完成大多查询操作
支持各种查询操作符,如 $gte
(大于等于)、$in
(包含)、$ne
(不等于)、$nin
(不包含)、$exists
(字段存在)。
示例:查询名字为the shy,或性别为男且年龄大于25岁的身份信息
db.student.find({name: "the shy"})
db.student.find({sex: '男', age: {$gte: 25}})
4.查询数据
$or
:查询满足多个条件中的任意一个的记录。$not
:查询不满足指定条件的记录。$all
:查询数组字段包含所有指定元素的记录。
示例:查询年龄小于30的男生和女生
db.student.find({ $or: [{age: {$lt: 30}, sex: "男"}, {age: {$lt: 25}, sex: "女"}]
})
4.ObjectId 操作
Objectld字段里面包含了时间戳,所以我们可以提取出记录、保存的时间。
可以使用 _id: ObjectId("...")
来查询具有特定 ObjectId 的文档。
db.collection.updateOne({_id: ObjectId("...")}, {...})
更新文档,
db.collection.deleteOne({_id: ObjectId("...")})
删除文档。
5.符号匹配
1.逻辑运算符
等于: $eq
小于: $lt
小于等于: $lte
大于: $gt
大于等于: $gte
不等于: $ne
返回满足所有条件的文档:$and : [条件1, 条件2, 条件3...]
返回满足条件1、条件2或条件3中的任何一个的文档:$or : [条件1, 条件2, 条件3...]
返回不满足条件1、条件2和条件3的文档:$nor : [条件1, 条件2, 条件3...]
返回在某个数组内的数据:$in: [条件1, 条件2, 条件3...]
2.联用正则表达式
使用$regex
操作符。
注:$options
是一个用于指定正则表达式行为的可选字段。
i
: 忽略大小写;m
: 多行模式;x
: 扩展模式;
s: 点号(.)匹配所有字符,包括换行符;l
: 局部匹配。
db.stu.find({address: {$regex: '^北京', $options: 'i'}})
3.skip 和 limit (分页)
db.stu.find().skip(3).limit(3)
跳过3个,提取3个。
4.排序:
sort({字段: ±1, 字段: ±1,......})
根据 age
字段升序排序,然后根据 name
字段降序排序
db.students.find().sort({age: 1, name: -1})
5.先排序后分页:
db.collection.find(查询条件).sort({字段名: 1}).skip(跳过的文档数).limit(返回的文档数)