# MongoDB 常见命令
# 命令
# 基础命令
启动
sudo systemctl start mongod
关闭
sudo systemctl stop mongod
查看状态
sudo systemctl status mongod
重启
sudo systemctl restart mongod
自动启动
sudo systemctl enable mongod
查看log
cat /var/log/mongodb/mongod.log
查看配置
cat /etc/mongod.conf
查看版本
mongodb -v
显示用户
show users
# 数据库操作
连接数据库
mongo
显示数据库列表
show dbs
显示当前数据库的名字
db
显示当前用户信息
db.runCommand({connectionStatus : 1})
切换当前数据库,如果数据库不存在则创建数据库
use <db name>
删除当前使用数据库
db.dropDatabase()
修改密码
> use admin
db.changeUserPassword("username", "xxx")
# 集合操作
显示当前数据库中的集合
show collections
创建集合: db.createCollection()
eg: db.createCollection("article") //创建一个名字为article的集合
删除集合:db.<collection name>.drop()
eg: db.article.drop() //删除名为article的集合
# 文档操作
# 插入文档
方法:db.<collection name>.insert(document)
db.article.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'Alvin',
url: 'https://www.mongodb.com/',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
# 查找文档
方法:db.<collection name>.find()
db.collection.find(query, projection)
- query:查询条件,类似于 SQL 中的 WHERE 部分
- projection:可选,使用投影操作符指定返回的键
eg:
查找所有集合
db.article.find()
条件查询,查询likes大于50的所有文档
db.article.find({'likes':{$gt:50}})
AND查询:查询title为MongoDB教程并且by为Andy的所有文档
db.article.find({'title':'MongoDB 教程','by':'Andy'})
OR查询:查询title为Redis 教程 或 MongoDB 教程的所有文档
db.article.find({$or:[{"title":"Redis 教程"},{"title": "MongoDB 教程"}]})
联合查询:查询likes大于50,并且title为Redis 教程或者MongoDB 教程的所有文档
db.article.find({"likes": {$gt:50}, $or: [{"title": "Redis 教程"},{"title": "MongoDB 教程"}]})
操作 | 格式 | SQL 中的类似语句 |
---|---|---|
等于 | {<key>:<value>} | where title = 'MongoDB 教程' |
小于 | {<key>:{$lt:<value>}} | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | where likes != 50 |
# 更新文档
方法 1:db.<collection name>.update()
db.collection.update(
<query>,
<update>,
{
multi: <boolean>
}
)
- query:修改的查询条件,类似于 SQL 中的 WHERE 部分
- update:更新属性的操作符,类似与 SQL 中的 SET 部分
- multi:设置为 true 时会更新所有符合条件的文档,默认为 false 只更新找到的第一条
db.article.update(
{'title':'MongoDB 教程'},
{$set:{'title':'MongoDB'}},
{multi:true}
)
方法 2:db.<collection name>.save(document)
完全替换
db.article.save({
"_id" : ObjectId("5e9943661379a112845e4056"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Andy",
"url" : "https://www.mongodb.com/",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100.0
})
# 删除文档
方法:db.<collection name>.remove()
db.collection.remove(
<query>,
{
justOne: <boolean>
}
)
- query:删除的查询条件,类似于 SQL 中的 WHERE 部分
- justOne:设置为 true 只删除一条记录,默认为 false 删除所有记录
eg:
db.article.remove({'title':'MongoDB 教程'})
# 其他操作
# limit
读取指定数量的文档 db.<collection name>.find().limit(NUMBER)
db.article.find().limit(2)
# skip
跳过指定数量的文档来读取 db.<collection name>.find().skip(NUMBER)
db.collection.find().skip(NUMBER)
# sort
在 MongoDB 中使用 sort()方法对数据进行排序,sort()方法通过参数来指定排序的字段,并使用 1 和-1 来指定排序方式,1 为升序,-1 为降序
按article集合中文档的likes字段降序排列
db.article.find().sort({ likes:1 })
# mongodb 命令
--dbpath 数据库路径(数据文件)
--logpath 日志文件路径
--master 指定为主机器
--slave 指定为从机器
--source 指定主机器的IP地址
--pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
--logappend 日志文件末尾添加
--port 启用端口号
--fork 在后台运行
--only 指定只复制哪一个数据库
--slavedelay 指从复制检测的时间间隔
--auth 是否需要验证权限登录(用户名和密码)