# 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 是否需要验证权限登录(用户名和密码)
陕ICP备20004732号-3