MongoDB
1、 MongoDB引言
1.1 基本概念
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。Nosql技术门类 redis 内存型 mongodb 文档型
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象(BSON)。字段值可以包含其他文档,数组及文档数组。
1.2 MongoDB的特点
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDB 是一个面向文档存储的数据库,易存储对象类型的数据
- 你可以在MongoDB记录中设置任何属性的索引 来实现更快的排序。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- 支持复制和故障恢复以及分片
1.3 Mongodb的安装(Ubuntu20.04安装MongoDB)
1.4 客户端基本操作
- 启动 mongoDB
./mongod --port=27017 --dbpath=/root/data
- 客户端连接
./mongo --port 27017
- .客户端基本操作
查看mongodb中所有库 show databases | show dbs
选中一个库 use database
查询当前所在库 db
创建库 use database #创建完成后会自动切换到这个库 mongo中不显示没有集合的库
查询当前库中有哪些集合 show collections
创建集合 db.createCollection("collectionName")
删除集合 db.集合名称.drop()
2、 Mongodb中常用的指令
2.1 库相关命令
查看库 show dbs | show databases
使用库 use 库名 #不存在则创建,并切换到新建库 存在 直接切换
查询当前使用库 db
删除一个库 db.dropDatabase()
帮助指令 db.help()
2.2 collection 相关指令
创建一个集合:
显式创建 db.createCollection("collectionName")
隐式创建 db.集合名称.insert({
"name":"zhangsan"})
查询库中存在哪些集合: show collections
删除库中集合: db.集合名.drop()
2.3 集合操作 CRUD 增删改查
1、向集合中插入数据
db.集合名称.insert({
"name":"zhangsan"})
db.集合名称.insertMany([{
"name":"zhangsan"},{
"name":"xiaosi"}])
使用js语法插入多条数据到mongodb中
for(var i=0;i<10;i++){
... db.mytest.insert({id:i,name:"xiaohei"+i});
... }
2、删除集合中记录
db.集合名.remove({}) #删除全部
db.集合名.remove({删除条件}) 指定条件删除
3、修改集合中记录
db.集合名.update({查询结果},{更新的内容},{条件})
db.集合名.update({查询结果},{更新的内容},{multi:true}) --开启多条更新
db.集合名.update({
"name":"xiaohei2"},{$set:{
"name":"xiaohei1"}},{multi:true,upsert:true}) --upsert:没有查询结果时插入记录
4、查询集合中记录
db.集合名.find()
db.集合名.count() //查询集合中条数
3、查询基本使用
3.1 基本查询
1.查询所有 db.集合名称.find()
2.查询一个 db.集合名称.findOne()
3.条件查询 db.集合名称.find|findOne({name:"",.....})
4.指定查询结果显示的key:
db.集合名.find({查询条件},{显示字段})
eg: db.test.find({name:"xiaohei1"},{name:1,age:1})
0 代表查询的结果不显示这个字段
1 代表查询的结果只显示这些字段
5.查询结果的排序
db.test.find().sort({age:1,name:-1}) -- 1升序 0降序
6.分页查询
db.test.find().sort({age:1,name:-1}).skip(起始条数).limit(每页查询记录数)
db.test.find().sort({age:1,name:-1}).skip((pageNow-1)*pageSize).limit(pageSize)
7.总条数查询
db.集合名.count()
db.集合名.find({条件}).count() 基于条件查询后的总条数
8.模糊查询 通过 **正则表达式** 模拟的查询
db.集合名称.find({
"name":"/ao/"}) --ERROR 会把/ao/当成一个字符串
db.users.find({name:/良/})
9.在数组中查询
db.users.find({likes:"看电视"})
结果为{ "_id" : 11, "name" : "不良人_11", "age" : 29, "likes" : [ "看电视", "读书" ] }
3.2 高级查询语法
1.等值查询 =($eq)
db.集合名.find({name:"xiaohei1"})
db.集合名.find({name:{$eq:"xiaohei1"}})
2. 且查询 and ($and)
db.集合名.find({$and:[ {}