MongoDB安装
MacOS
-
brew本来不能安装
-
这是用于官方MongoDB软件的自定义HomebrewTap
-
使用以下命令在MacOS终端会话中添加自定义Tap:
brew tap mongodb/brew
-
可正常安装
brew install mongodb-community@4.2
如果安装了旧版本报错
删除后重新安装
`brew untap mongodb/brew && brew tap mongodb/brew`
`brew install mongodb-community@4.2`
除了二进制文件之外,安装还创建了:
- the configuration file (/usr/local/etc/mongod.conf)
- the log directory path (/usr/local/var/log/mongodb)
- the data directory path (/usr/local/var/mongodb)
mongodb阿里云CentOS
- 配置yum源
vi /etc/yum.repos.d/mongodb-org-4.2.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
- yum 安装
sudo yum install -y mongodb-org
配置
CentOS配置&启用
-
编辑配置文件 /etc/mongod.conf
- 默认日志数据文件位置都在里面
- 记得设置允许访问ip bindIp
-
用systemctl启动mongodb
sudo systemctl start mongod
# if error Failed to start mongod.service: Unit mongod.service not found.
sudo systemctl daemon-reload
- 验证是否成功
sudo systemctl status mongod
sudo systemctl enable mongod
- 停止服务
sudo systemctl stop mongod
- 重启
sudo systemctl restart mongod
- 远程登录
mongo ip/port
- 阿里云设置安全组
MACOS运行MongoDB社区版
-
要将MongoDB(即mongod进程)作为macOS服务运行,请发出以下命令
brew services start mongodb-community@4.2
-
要将MongoDB 作为后台进程手动运行,请发出以下命令:
mongod --config /usr/local/etc/mongod.conf --fork
两种方法都使用/usr/local/etc/mongod.conf在安装过程中创建的文件。您也可以将自己的MongoDB 配置选项添加到此文件中。
-
要验证MongoDB是否正在运行,请mongod在正在运行的进程中进行搜索
ps aux | grep -v grep | grep mongod
维修
-
删除下载的.tgz档案
brew untap mongodb/brew && brew tap mongodb/brew
-
重试安装
brew install mongodb-community@4.2
MongoDB使用
基础命令
-
查看当前的数据库:
db
-
查看所有的数据库:
show dbs/show databases
-
切換数据库:
use db_name
-
删除当前的数据库:
db.Dropdatabase()
-
不用手动创建数据库
-直接添加就会生成数据库了
关于集合
集合就是mysql的表了
-
不手动创建集合
向不存在的集合中第一次加入数据时,集合会被创建出来
-
手动创建结合
db.createCollection(name, options)
db.createCollection ("stu")
db.createCollection ("sub", {capped: true, size: 10})
- 参数 capped:认值为 false 表示不设置上限,值为 true 表示设置上限 - 参数 size:当 capped 值为 true 时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
-
查看集合:
show collections
-
删除集合:
db.集合名称.drop ()
数据类型
Object ID:文档 ID (文档将要存入数据库的一个个的字典)
String:字符串,最常用,必须是有效的 UTF-8
Boolean:存储一个布尔值,true 或 false 必须小写
Integer:整数可以是 32 位或 64 位,这取決于服务器
Double:存储浮点值
Arrays:数组或列表,多个值存储到一个键
Object:用于嵌入式的文档,即一个值为一个文档可以储存另一个集合
Nul:存储 Nu 山值
Timestamp:时间戳,表示从 1970-1-1 到现在的总秒数
Date:存储当前日期或时间的 UNX 时间格式
注意点
- 创建日期语句如下:参数的格式为 YYYY-MM-DD new Date (2017-12-20)
- 每个文档都有一个属性,为_id,保证每个文档的唯一性
- 可以自己去设置 id 插入文档,如果没有提供,那么 Mongodb 为每个文档提供了一个独特的_id,类型为 objectId
- objectId 是一个 12 字节的十六进制数:
- 前 4 个字节为当前 时间戳
- 接下来 3 个字节的 机器 ID
- 接下来的 2 个字节中 Mongodbe 的服务进程 id
- 最后 3 个字节是 简单的增量值
插入&保存
插入
db.集合名称.insert(document)
db.stu.insert({name: 'gi',gender: 1})
db.stu.insert({\_id: "20170101, name: 'gi', gender: 1)
插入文档时,如果不指定_id 参数,Mongodb 会为文档分配一个唯一的 ObjectId
保存
db.集合名称.save(document)
如果文档的 _id
已经存在则修改,如果文档的 _id
不存在则添加 Mongodb 插入数据
对比
db.collecion.insert({}
插入数据,_id
存在就报错db.collection.save({})
插入数据,_id
查询
db.集合名称.find({条件文档})
db.集合名称.findOne({条件文档})
查一条
db.集合名称.find({条件文档}).prett()
格式化结果
更新
不加$set:
会变为替换整个
db.集合名称.update({<query>, <update>, multi:<boolean>})
query:查询条件参数
update:更新操作符
multi:可选,默认是 false,表示只更新找到的第一条记录,值为 true 表示把满足条件的文档全部更新
db.test1000.update({name: "xiaowang")}, {name: "xiaozhao"})
name 为 xiaowan 的数据替换为{name: "xiaozhao"}
db.test1000.update({name: "xiaowang"}, {$set:{name: "xiaozhao"}})
把 name 为 xiaowang 的数据 name 的值更新为 xiaozhang
db.test1000.update({name: "xiaowang"}, {$set:{name: "xiaozhao"}} ,{multi: true})
{multi: true}达到更新多条的目的
注意:“multi update only works with $ operators”
删除
db.集合名称.remove(<query>,{justOne: <boolean>})
参数 query:可选,删除的文档的条件
参数 justOne:可选,如果设为 true 或 1, 则只删除一条,默认 false,表示删除多条
比较运算符
- 等于:默认是等于判断,没有运算符
- 小于:
$lt
(less than) - 小于等于:
$ltb
(less than equa) - 大于:
$gt
(greater than) - 大于等于:
$gte
- 不等于:
$ne
db.stu.find({age: {$gte: 18}})
范围运算符
使用$in
, $nin
判断是否在某个范围内查询
查询年龄为 18、28、38 的学生
db.stu.find({age: {$in:[18, 28, 38]}})
逻辑运算符
And:在 json 中写多个条件即可
查询年龄大于或等于 18, 并且性别为 true 的学生
db.stu.find({age: {$gte: 18}}, {gender: true})
Or: 使用$or
,值为数组,数组中每个元素为 json
查询年龄大于 18, 或性别为 false 的学生
db.stu.find({$or: [age: {$gte: 18}, {gender: flase}]})
查询年龄大于 18 或性别为男生,并且姓名是郭靖
db.stu.find({$or:[{age: {$gte: 18}},{gender: true}],{name: 'gj'}})
支持正则表达式
使用//
或$regex
编写正则表达式
abc开头,789结尾
db.products.find({sku: /^abc/})
db.products.find ({sku: {$regex: '789$'})
Limit 和 skip
-
方法 limit ():
用于读取指定数量的文档
db.集合名称.find().limit(NUMBER)
查询 2 条学生信息
db.stu.find().limit(2)
-
方法 skip ():
用于跳过指定数量的文档
db.集合名称.find.skip(NUMBER)
db.stu.find().skip(2)
-
同时使用
db.集合名称.find.limit(NUMBER).skip(NUMBER)
db.集合名称.find.skip(NUMBER).limit(NUMBER)
推荐
自定义查询*
使用$ where
后面写一个函数,返回满足条件的数据
查询年龄大于 30 的学生
db.stu.find ({
$where: function(){
return this age > 30;
}
})
投影
在查询到的返回结果中,只选择必要的字段
db.集合名称.find({}, {字段名称:1, ...]}
参数为字段与值,值为 1 表示显示,值为 0 不显
特殊:对于_id 列默认是显示的,如果不显示需要明确设置为 0
db.stu.find({},{_id: 0, name: 1, gender: 1})
排序
方法 sort (),用于对集进行排序
db.集合名称.find().sort({字段:1})
参数 1 为升序排列
参数-1 为降序排列
根据性别降序,再根据年龄升序
db.stu.find().sort({gender: -1, age: 1})
导入导出数据
导出命令:mongoexport
语法:mongoexport -d dbname -c collectionname -o filepath --type json/csv -f field
-d:数据库名
-c:集合名称
-o : 导出数据文件的路径
-type : 导出数据类型,默认json
导入命令:mongoimport
语法:mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
-d:数据库名
-c:集合名称
--file : 选择导入的文件
-type : 文件类型,默认json
-f : 字段,type为csv是必须设置此项