千家信息网

MongoDb基础命令

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,一些基础忘记随时查看。。#整备恢复mongodump --port 20001 --authenticationDatabase=admin -u * -d lvlv -c lvlv -o /home
千家信息网最后更新 2026年11月02日MongoDb基础命令

一些基础忘记随时查看。。

#整备恢复

mongodump --port 20001 --authenticationDatabase=admin -u * -d lvlv -c lvlv -o /home

mongorestore --drop --host 172.16.201.74 --port 20001 --authenticationDatabase=admin -umgbackup -d test /tmp/liding/test/liding.bson


#基于时间备份oplog

mongodump --port 20001 --authenticationDatabase=admin -u* -d local -c oplog.rs -q 'ts:{$lt:Timestamp(1462830369,1),$gt: Timestamp(1462821613, 1)}}' -o /tmp/lidddd


#将oplog恢复到临时库

mongorestore -u* --authenticationDatabase=admin --host 172.16.201.73 --port 27017 -d local -c oplog.rs /data/backup/oplog1/local/oplog.rs.bson

#从临时库重放oplog

mongooplog --port 20001 -u* --authenticationDatabase=admin --from=172.16.201.73:27017



oplog查找

db.oplog.rs.find({ts:{$lt:Timestamp(1462917498, 1),$gt:Timestamp(1462918425, 1)}}).pretty()



use local

db.oplog.rs.find()

date -d @1361542596 +"%Y-%m-%d %H:%M:%S"

for (var i=0;i<1000;i++){db.lvlv.save({"xywy":i})}

sql="db.getReplicationInfo();"

echo "$sql"|/usr/local/xywy/mongodb-3.0.8/bin/mongo 127.0.0.1:20001/admin -u* -pC^8cE#1RvX5rBg0 --authenticationDatabase=admin --shell


添加管理用户:

use admin

db.createUser(

{

user: "*",

pwd: "*****",

roles: [ { role: "root", db: "admin" } ]

}

)

添加备份用户:

use admin

db.createUser(

{

user: "mgbackup",

pwd: "*********",

roles: [ { role: "backup", db: "admin" }, { role: "restore", db: "admin" } ]

}

)

添加日常操作用户:

use admin

db.createUser(

{

user: "mgadmin",

pwd: "*****",

roles: [ { role: "readWriteAnyDatabase", db:admin } ]

}

)

添加读写用户:

use admin

db.createUser(

{

user: "liuyunsong",

pwd: "*****",

roles: [

{ role: "rw", db: "123" }

]

}

)

修改用户权限:

use admin

db.runCommand(

{

updateUser:"liuyaxin",

pwd:"****",

roles: [

{ role: "read", db: "123" }

]

}

)

删除用户:

use 123

db.dropUser("123")

删除一个库下所有用户:

use 123

db. dropAllUsers ()

对用户添加角色:

use 123

db.runCommand( { grantRolesToUser: "*",

roles: [

{ role: "admin", db: "admin"}

]

} )

对用户移除角色:

use 123

db.runCommand( { revokeRolesFromUser: "liuyaxin",

roles: [

{ role: "read", db: "234"}

]

} )

创建角色:

use admin

db.runCommand({ createRole: "rw",

privileges: [

{ resource: { db: "123", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }

],

roles: [

{ role: "read", db: "admin" }

]

})

修改角色权限:

use admin

db.runCommand(

{

updateRole: "rw",

privileges:

[

{

resource: { db: "123", collection: "" },

actions: [ "find" , "update", "insert", "remove" ]

}

],

roles:

[

{ role: "read", db: "admin" }

]

}

)

删除角色:

use admin

db.runCommand(

{

dropRole: "rw",

writeConcern: { w: "majority" }

}

)

删除所有角色:

Use 123

db.runCommand(

{

dropAllRolesFromDatabase: 1,

writeConcern: { w: "majority" }

}

)

为角色增加权限:

use 123

db.runCommand(

{

grantPrivilegesToRole: "rw",

privileges: [

{

resource: { db: "123", collection: "" }, actions: [ "find" ]

}

]

}

)

移除角色权限:

Use 123

db.runCommand(

{

revokePrivilegesFromRole: "rw",

privileges:

[

{

resource: { db: "123", collection: "" },

actions: [ "insert", "find" ]

}

]

}

)

刷新权限:

Use admin

db.runCommand( { invalidateUserCache: 1 } )


1、数据库中查询业务人员给的账号在数据库中是否存在

use database

show users

2、根据业务开发人员提出的需求授权

读写用户名:库名

先定义读写角色

use 库名

db.runCommand({ createRole: "rw",

privileges: [

{ resource: { db: "库名", collection: "" }, actions: [ "find", "update", "insert", "remove","listCollections"] }

],

roles: [

]

})

再加用户

use 库名

db.createUser(

{

user: "库名",

pwd: "*****",

roles: [

{ role: "rw", db: "库名" }

]

}

)


只读用户:库名_r

先定义只读角色

use 库名

db.runCommand({ createRole: "r",

privileges: [

{ resource: { db: "库名", collection: "" }, actions: [ "find","listCollections" ] }

],

roles: [

]

})

在添加用户

use 库名

db.createUser(

{

user: "库名_r",

pwd: "************",

roles: [

{ role: "r", db: "库名" }

]

}

)



3、检验授权有无生效

使用授权的用户登录数据库,查看该库权限是否正确

use 库名

db.auth("""")

4、将授权好的用户名密码发给该项目负责人同时发给dba组存档,格式如下

idc:xx 主库 ip:port 从库 ip:port

数据库: databases

读写用户: databases 读写密码: xxx

只读用户: databases_r 只读密码: xxx

管理用户: database_admin 管理密码: xxx


->use Admin (切换到创建用户)


->db.TestDb (创建数据库)


->db.addUser("userName","Pwd") 创建用户


->db.auth("userName","Pwd") 设置用户为允许连接的用户


->db.createCollection("TableName") 创建表


->showcollections 查看表是否创建成功


->db.TableName.Save({age:1}) 添加数据


->db.TableName.find() 查看添加的数据是否成功(如果没有查询到任何的结果,说明添加失败)


创建数据库

语法

MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

注:该命令只是在内存中临时创建数据库,创建后如果没有写入操作退出后会在内存中释放

删除数据库

语法

MongoDB 删除数据库的语法格式如下:

db.dropDatabase()

注:删除库之前一定要先use database


插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert({document})

MongoDB 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。

update() 方法

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update( , , { upsert: , multi: , writeConcern: } )

参数说明:

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

save() 方法

save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save( , { writeConcern: } )

MongoDB 删除文档

MongoDB remove()函数是用来移除集合中的数据。

在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

语法

remove() 方法的基本语法格式如下所示:

db.collection.remove( , { justOne: , writeConcern: } )

参数说明:

query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 或 1,则只删除一个文档。

writeConcern :(可选)抛出异常的级别。

查询文档

语法

MongoDB 查询数据的语法格式如下:

>db.COLLECTION_NAME.find()

find() 方法以非结构化的方式来显示所有文档。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

>db.col.find().pretty()

MongoDB 与 RDBMS Where 语句比较

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

等于 {:} db.col.find({"by":"xywydba"}).pretty() where by = 'xywydba'

小于 {:{$lt:}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50

小于或等于 {:{$lte:}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50

大于 {:{$gt:}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50

大于或等于 {:{$gte:}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50

不等于 {:{$ne:}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

操作

格式

范例

RDBMS中的类似语句

MongoDB AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。

语法格式如下:

>db.col.find({key1:value1, key2:value2}).pretty()

MongoDB OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

>db.col.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()

MongoDB Limit与Skip方法

MongoDB Limit() 方法

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

语法

limit()方法基本语法如下所示:

>db.COLLECTION_NAME.find().limit(NUMBER)

MongoDB Skip() 方法

我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

语法

skip() 方法脚本语法格式如下:

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)


MongoDB 排序

MongoDB sort()方法

在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

语法

sort()方法基本语法如下所示:

>db.COLLECTION_NAME.find().sort({KEY:1})

MongoDB 聚合

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

aggregate() 方法

MongoDB中聚合的方法使用aggregate()。

语法

aggregate() 方法的基本语法格式如下所示:

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

下表展示了一些聚合的表达式:

表达式

描述

实例

$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])

$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])

$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])

$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])

$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])

$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])

$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])

$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:

$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

$limit:用来限制MongoDB聚合管道返回的文档数。

$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group:将集合中的文档分组,可用于统计结果。

$sort:将输入文档排序后输出。

$geoNear:输出接近某一地理位置的有序文档。

管道操作符实例

1.$project实例

db.article.aggregate( { $project : { title : 1 , author : 1 , }} );

2.$match实例

db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );

3.$skip实例

db.article.aggregate( { $skip : 5 });

mongoDB常用命令

1、与Mql对照

MySQL

MongoDB

说明

mysqld

mongod

服务器守护进程

mysql

mongo

客户端工具

mysqldump

mongodump

逻辑备份工具

mysql

mongorestore

逻辑恢复工具

db.repairDatabase()

修复数据库

mysqldump

mongoexport

数据导出工具

source

mongoimport

数据导入工具

grant * privileges on *.* to …

Db.addUser()

Db.auth()

新建用户并权限

show databases

show dbs

显示库列表

Show tables

Show collections

显示表列表

Show slave status

Rs.status

查询主从状态

Create table users(a int, b int)

db.createCollection("mycoll", {capped:true,

size:100000}) 另:可隐式创建表。

创建表

Create INDEX idxname ON users(name)

db.users.ensureIndex({name:1})

创建索引

Create INDEX idxname ON users(name,ts DESC)

db.users.ensureIndex({name:1,ts:-1})

创建索引

Insert into users values(1, 1)

db.users.insert({a:1, b:1})

插入记录

Select a, b from users

db.users.find({},{a:1, b:1})

查询表

Select * from users

db.users.find()

查询表

Select * from users where age=33

db.users.find({age:33})

条件查询

Select a, b from users where age=33

db.users.find({age:33},{a:1, b:1})

条件查询

select * from users where age<33

db.users.find({'age':{$lt:33}})

条件查询

select * from users where age>33 and age<=40

db.users.find({'age':{$gt:33,$lte:40}})

条件查询

select * from users where a=1 and b='q'

db.users.find({a:1,b:'q'})

条件查询

select * from users where a=1 or b=2

db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )

条件查询

select * from users limit 1

db.users.findOne()

条件查询

select * from users where name like "%Joe%"

db.users.find({name:/Joe/})

模糊查询

select * from users where name like "Joe%"

db.users.find({name:/^Joe/})

模糊查询

select count(1) from users

Db.users.count()

获取表记录数

select count(1) from users where age>30

db.users.find({age: {'$gt': 30}}).count()

获取表记录数

select DISTINCT last_name from users

db.users.distinct('last_name')

去掉重复值

select * from users ORDER BY name

db.users.find().sort({name:-1})

排序

select * from users ORDER BY name DESC

db.users.find().sort({name:-1})

排序

EXPLAIN select * from users where z=3

db.users.find({z:3}).explain()

获取存储路径

update users set a=1 where b='q'

db.users.update({b:'q'}, {$set:{a:1}}, false, true)

更新记录

update users set a=a+2 where b='q'

db.users.update({b:'q'}, {$inc:{a:2}}, false, true)

更新记录

delete from users where z="abc"

db.users.remove({z:'abc'})

删除记录

db. users.remove()

删除所有的记录

drop database IF EXISTS test;

use test

db.dropDatabase()

删除数据库

drop table IF EXISTS test;

db.mytable.drop()

删除表/collection

db.addUser('test', 'test')

添加用户

readOnly-->false

db.addUser('test', 'test', true)

添加用户

readOnly-->true

db.addUser("test","test222")

更改密码

db.system.users.remove({user:"test"})

或者db.removeUser('test')

删除用户

db.system.users.find()

查看用户列表

show users

查看当前库所有用户

db.printCollectionStats()

查看各collection的状态

db.printReplicationInfo()

查看主从复制状态

show profile

查看profiling

db.copyDatabase('mail_addr','mail_addr_tmp')

拷贝数据库

db.users.dataSize()

查看collection数据的大小

db. users.totalIndexSize()

查询索引的大小


文档 数据 用户 方法 语法 查询 条件 数据库 格式 管道 角色 参数 排序 结果 更新 权限 命令 实例 密码 工具 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 高科技互联网 中国互联网科技工作委员会毛军 科技互联网公司装修 互联网中国科技 与互联网科技公司 北京禾田雨橡互联网科技 金融科技和互联网金融 山东吉时兔互联网科技有限公司 央行互联网金融科技公司 互联网科技项目计划书材料类 苏州五指互联网络科技有限 新兴科技互联网创新大赛颁奖典礼 烟台灵鸽互联网科技有限公司 山东子淼互联网科技有限公司 上海钢联属于互联网科技股吗 城市宝互联网科技有限公司 江苏互联网科技小贷 福仕德教育科技互联网 承德科技产业互联网平台 上海旺乐尼互联网科技有限公司 互联网科技公司经营范围 互联网科技金融 互联网科技股票 未来的互联网科技 郑州华宇互联网科技 本届互联网博览会上的黑科技 上海创道互联网络科技有限公司 下一代互联网重大应用科技园 好易买互联网科技 互联网大会出现的黑科技
0