一、MongoDB介绍
MongoDB是一个基于分布式文件存储的数据库。由 C++ 语言编写,其将数据存储为一个文档,数据结构由键值对形式表示,文档型类似json对象,字段值可以包含其他文档,数组及文档数组。MongoDB存储的是Bjson类型,是二进制序列化的形式,也支持嵌套。
常用数据类型:
- 字符串String
- 整型数值Integer
- 布尔值 Boolean
- 数组 Array
- 时间戳 Timestamp
- 对象,内嵌文档 Object
- 空值 Null
- 日期时间 Date
- 对象ID Object ID
- 二进制数据 Binary Data
- 代码类型 Code
- 正则表达式 Regular expression
二、Ubuntu安装MongoDB
- 传统方式外部安装
tar -zxvf mongodb-linux-x86_64-ubuntu2004-6.0.1.tgz
mv -r mongodb-linux-x86_64-ubuntu2004-6.0.1/ /usr/local/mongodb
环境变量配置 vim /etc/profile:
# set mongo dev
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
source /etc/profile
cd /usr/local/mongodb
mkdir -p data/db
chmod 777 data/db
mkdir logs && cd logs && touch mongodb.log
# 设置启动配置
cd /usr/local/mongodb/bin
vi mongodb.conf
插入下列内容:
dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
启动mongod数据库服务,以配置文件的方式启动
cd /usr/local/mongodb/bin
./mongod -f mongodb.conf
安装mongodb-clients
apt install mongodb-clients
2)使用docker安装。在容器启动
docker pull mongo:版本号xxx //拉镜像
docker run -d --name mongo --p 27017:27017 mongo:版本号xxx // 运行镜像
docker exec -it xxx bash // 进入mongo 容器
mongo //启动mongo客户端
三、MongoDB常用命令
3.1、操作库
查看所有库
show dbs | show databases;
创建或者切换数据库 # 连接后默认进入的是test的库
use xxx; # 库中无集合数据时,查看库时不显示
查看当前所在的库
db
插入数据
db.users.insert({name:"jude"});
删除数据库
db.dropDatabase(); # 删除有数据的库后,show dbs不展示,db查看还是在当前库
3.2、操作集合(集合类似关系型数据库中的表,无修改操作)
查看库中所有集合
show collections | show tables;
创建集合
(显式创建,集合存在)
db.createCollection('集合名称', [options])
db.createCollection('pro',{max:100,capped:true,size:50000})
(隐式创建,集合不存在)
db.temp.insert({name:"zhangsan"});
db.emp.insert({name:"wu"})
删除集合
db.集合名称.drop();
3.3、文档相关操作(集合中最小单元) 官方文档
每条文档放入集合中时,会自动维护一个_id,也可手动指定
1、创建
a. 单条文档创建
db.users.insert({name:'zhangsan', age:13, birthday:"2017-01-02"})
b. 多条文档创建(insertMany或insert)
db.users.insertMany([{name:"wuw",age:12},{_id:1,name:"hha",age:22}])
db.users.insert([{name:"hy",age:32},{name:"word",age:14}])
c. js脚本方式创建
for(let i=3;i<9;i++){
db.users.insert({_id:i,name:"lili"+i,age:i+12});
}
2、删除文档
db.集合名词.remove(<query>,{
justone: <boolean>,
writeConcern: <document>
})
可选参数:
query : 删除条件
删除的配置对象 {justone:1或true删一条,false删匹配到的所有行, writeConcern:抛出的异常级别}
db.集合名词.remove({}) # 不带条件则删除所有,删除后集合还是存在的
删除下划线为1的文档记录
db.users.remove({_id:1})
db.users.remove({_id:ObjectId("632f03048e7c53ca629b7715")})
删除多条数据
3、更新
db.集合名.update(
<query>,
<update>, 对象或者操作符($,$inc..) 可理解为sql update查询内set后面的
{
upsert: <boolean>, 默认值false,不插入。true时,这条记录不存在会插入进去
multi: <boolean>, 默认值false,多条时只更新一条,true查询匹配多条时全部更新
writeConcern: <document> 抛出的异常级别
}
);
query: 基于哪些条件更新 必输
update: 更新的内容 必输
更新配置对象{}: 非必输
更新时默认先将原内容删除在重新插入,不指定$set,会覆盖原内容,不保留原内容,如下图,更新后name没有了
$set 保留原来数据更新,但是只更新符合条件的第一条数据。
不更新age则保留之前的
不指定multi true,默认只更新匹配到的第一条
指定时,匹配到会全部更新
指定upsert,不存在时,则创建文档
4、文档查询
find方法以非结构化的方式显示所有文档,如果需要结构化,需要使用find().pretty(),可以以美观的格式化的显示文档
(超过一定长度才会格式化)。
db.集合名词.find().pretty()
- 条件查询
查询年龄24的
db.users.find({age:24})
查询年龄小于28的
db.users.find({age:{$lt:28}})
查询年龄小于等于28的
db.users.find({age:{$lte:28}})
查询年龄大于24的
db.users.find({age:{$gt:24}})
查询年龄大于等于24的
db.users.find({age:{$gte:24}})
查询年龄不等于24的
db.users.find({age:{$ne:24}})
2) AND查询
db.集合名词.find(key1:value1, key2:value2,...).pretty()
查不到返回空
and查询时相同字段出现多次时,以后面字段为主
例:查询年龄24,名字是wul_0的
db.users.find({age:24,name:"wul_0"})
多条件查询时,同一个查询条件写多次时,后面的会覆盖前面的如:
查询年龄24的,且年龄大于等于28的,后面条件覆盖前面的会查询年龄大于等于28的
db.users.find({age:24, age:{$gte:28}})
3) OR查询
db.集合名词.find(
{
$or:[
{key1:value1},{key2:value2}
]
}
).pretty()
例:db.users.find({$or:[{name:"wul_1"},{age:28}]}) # 查询名字是wul_1或者年龄28的
db.users.find({$or:[{name:"wul_1"},{age:{$gte:28}}]}) # 查询名字是wul_1或者年龄大于等于28的
4) AND和OR联合查询
# 查询年龄大于等于24,且名字为wul_8或wul_0的
db.users.find({age:{$gte:24},$or:[{name:"wul_8"},{name:"wul_0的"}]})
5) 数组中查询
db.users.find({likes:"music"})
{ "_id" : 11, "age" : 28, "likes" : [ "footballxx", "music", "basketball" ], "name" : "wulxx_11" }
6) $size 按数组长度查询
db.users.find({likes:{$size:3}})
{ "_id" : 11, "age" : 28, "likes" : [ "footballxx", "music", "basketball" ], "name" : "wulxx_11" }
7) 模糊查询 通过正则实现
db.users.find({name:/wu/}) 名字中包含wu的
8) 排序
db.集合名称.find().sort({name:1,age:1}); # 类似order by name,age
1 升序 -1 降序
# 按年龄降序
db.users.find().sort({age:-1})
# 按年龄降序,按名字升序
db.users.find().sort({age:-1, name:1})
9) 分页
排序结果分页处理
db.集合名称.find().sort({条件}).skip(start).limit(rows) # 类似于limit start, rows
# 起始条数为page-1
db.users.find().sort({age:-1,name:1}).skip(page-1).limit(2)
# 查询总条数
db.集合名称.count()
db.orders.find({name:'order_100'}).count() # 加在条件后计数
db.orders.find({_id:{$gt:500}}).count()
10) 去重 ,返回去重字段的数组
db.集合名称.distinct('字段')
db.users.distinct('age')
# [ 24, 28 ]
11) 指定返回字段
db.集合名称.find({条件}, {name:1, age:1})
第二个参数,1时返回该字段,0时不返回。 0和1不能同时使用
# 只返回name字段,_id为文档的唯一标识默认会返回
db.users.find({},{name:1})
# 不返回name字段
db.users.find({},{name:0})
标签:Mongo,age,db,查询,命令,users,安装,find,name
From: https://www.cnblogs.com/hikk/p/16723352.html