MongoDB基本操作
数据库实例建立后,就可以对数据库进行各种基本命令操作了,具体包括了插入、更新、删除、查询、索引、聚合、复制、分片等。
可以参考:https://docs.mongodb.com/manual/crud/
插入文档
通过MongoDB往MongoDB指定集合里插入文档,在传统关系型数据库里相当于往表里插入记录,最主要的区别是MongoDB事先无需对数据存储结构进行定义,用插入命令往数据库文件里写入数据的同时就自动建立相关内容。
语法:db.collection.insert({“键名1”:值1, “键名2”: 值2 …})
> use test
switched to db test
> db.books.insert(
... {name:"C语言编程",
... price:32
... }
... )
WriteResult({ "nInserted" : 1 })
> db.books.insert({name:"Python入门",price:48})
WriteResult({ "nInserted" : 1 })
> db.books.find()
{ "_id" : ObjectId("5e0cb711eb18ea3208bc19a8"), "name" : "C语言编程", "price" : 32 }
{ "_id" : ObjectId("5e0cb746eb18ea3208bc19a9"), "name" : "Python入门", "price" : 48 }
# insert命令,自动产生一个_id值
# "_id"是十六进制表示(12B):时间戳(4B)+机器ID(3B)+进程ID(2B)+排序流水号(3B)
# insert命令可以用save命令代替。若给save命令指定_id值,则会更新默认_id值;
# 集合books不存在,则会创建,如存在,则变成多条文档的集合
利用中括号,实现一次多条文档插入
> db.books.insert(
... [ {name:"小学生教材",price:20},
... {name:"初中生教材",price:30},
... {name:"高中生教材",price:40}
... ]
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
可以使用变量方式插入文档
> document = ({name:"英文教材",price:49})
{ "name" : "英文教材", "price" : 49 }
> db.books.insert(document)
WriteResult({ "nInserted" : 1 })
查询文档
语法:
db.集合名.findOne() #查询一行
db.集合名.find() #查询全部
db.集合名.find().pretty() #格式化打印
db.集合名.find({查找条件}) #按照条件进行查找
查询一条记录
> db.books.findOne()
{
"_id" : ObjectId("5e0cb711eb18ea3208bc19a8"),
"name" : "C语言编程",
"price" : 32
}
查询所有记录
> db.books.find().pretty()
{
"_id" : ObjectId("5e0cb711eb18ea3208bc19a8"),
"name" : "C语言编程",
"price" : 32
}
{
"_id" : ObjectId("5e0cb746eb18ea3208bc19a9"),
"name" : "Python入门",
"price" : 48
}
{
"_id" : ObjectId("5e0cb8e0eb18ea3208bc19aa"),
"name" : "Java学习",
"price" : 65
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b7"),
"name" : "小学生教材",
"price" : 20
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b8"),
"name" : "初中生教材",
"price" : 30
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b9"),
"name" : "高中生教材",
"price" : 40
}
{
"_id" : ObjectId("5e0cbc16eb18ea3208bc19ba"),
"name" : "英文教材",
"price" : 49
}
等价条件查询
公共查询条件:{:,…},多条件时进行与(and)条件查询。
> db.books.find({price:30}).pretty()
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b8"),
"name" : "初中生教材",
"price" : 30
}
带$in运算符的查询
用带$in运算符实现或(or)条件查找,代码如下:
db.books.find({price:{$in:[20,30,40]}}).pretty()
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b7"),
"name" : "小学生教材",
"price" : 20
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b8"),
"name" : "初中生教材",
"price" : 30
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b9"),
"name" : "高中生教材",
"price" : 40
}
通过查询操作符来查询
公共查询条件:{:{:},…}
find()的查找条件操作符及实例
操作符 | 格式 | 实例 | 与TRDB的类似语句 |
---|---|---|---|
小于 | {:{$lt:}} | db.books.find({price:{$lt:30}}) | where price<30 |
小于等于 | {:{$lte:}} | db.books.find({price:{$lte:30}}) | where price<=30 |
大于 | {:{$gt:}} | db.books.find({price:{$gt:30}}) | where price>30 |
大于等于 | {:{$gte:}} | db.books.find({price:{$gte:30}}) | where price>=30 |
不等于 | {:{$ne:}} | db.books.find({price:{$ne:30}}) | where price!=30 |
and | {key1:value1,key2:value2,…} | ||
or | {$or:[{key1:value1},{key2:value2},…]} | ||
正则表达式 | :{$regex:/pattern/} |
正则实例:
#查询值的固定后一部分
> db.books.find({name:{$regex:/教材$/}}).pretty()
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b7"),
"name" : "小学生教材",
"price" : 20
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b8"),
"name" : "初中生教材",
"price" : 30
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b9"),
"name" : "高中生教材",
"price" : 40
}
{
"_id" : ObjectId("5e0cbc16eb18ea3208bc19ba"),
"name" : "英文教材",
"price" : 49
}
>
# 查询值的固定前一部分
> db.books.find({name:{$regex:/^C语言/}}).pretty()
{
"_id" : ObjectId("5e0cb711eb18ea3208bc19a8"),
"name" : "C语言编程",
"price" : 32
}
# 查询值的任意部分
> db.books.find({name:{$regex:/Python/}}).pretty()
{
"_id" : ObjectId("5e0cb746eb18ea3208bc19a9"),
"name" : "Python入门",
"price" : 48
}
#不区分大小写
> db.books.find({name:{$regex:/python/i}}).pretty()
{
"_id" : ObjectId("5e0cb746eb18ea3208bc19a9"),
"name" : "Python入门",
"price" : 48
}
区间条件查找
#查找price大于15小于35的值
> db.books.find({price:{$gt:15,$lt:35}}).pretty()
{
"_id" : ObjectId("5e0cb711eb18ea3208bc19a8"),
"name" : "C语言编程",
"price" : 32
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b7"),
"name" : "小学生教材",
"price" : 20
}
{
"_id" : ObjectId("5e0cbbd2eb18ea3208bc19b8"),
"name" : "初中生教材",
"price" : 30
}
更新文档
对于集合里插入的文档,若需要修改,则需使用MongoDB提供的文档更新命令。
语法:db.collection.update
修改一条简单的文档
在集合order里,先插入一条订单信息,然后用update命令修改订单名称。
> use test
switched to db test
> db.order.insert(
... {
... title:"商品购物单1",
... amount:35,
... detail:[
... {name:"苹果",price:22},{name:"面粉",price:18}
... ]
... }
... )
WriteResult({ "nInserted" : 1 })
> db.order.update(
... {
... title:"商品购物单1" #查找条件
... },
... {
... $set:{title:"商品购物单2"} #修改某一值,用$set操作符
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
还可以做数值运算
> db.order.update(
... {
... title:"商品购物单2"
... },
... {$inc:{amount:5}} #$inc操作符做加法运算,可以是正数、负数,小数
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.order.find().pretty()
{
"_id" : ObjectId("5e296c68539bb57c3aa7a6c4"),
"title" : "商品购物单2",
"amount" : 40,
"detail" : [
{
"name" : "苹果",
"price" : 22
},
{
"name" : "面粉",
"price" : 18
}
]
}
# $mul 可以做乘法运算
# $rename 可以修改错误的键名
# $unset 可以删除一个字段
修改一条文档里的数组和嵌套文档
对文档里的子文档值进行修改,可以通过主Key.SubKey的组合来实现指定子文档字段对应值的修改;对于数组值的修改,可以通过Key.Number的方式指定修改数组值,Number从0,1,…开始,对应数组的第一个下标、第二个下标…
> db.order.insert(
... {
... _id:12,
... title:"商品购物单5",
... amount:90,
... unit:"元",
... detail:[
... {name:"葡萄",price:60},{name:"面粉",price:30}
... ],
... overview:{shop:"京东电子商务平台",shopno:5,address:"地球村"}
... }
... )
WriteResult({ "nInserted" : 1 })
> db.order.update(
... {_id:12},
... {
... $set:{
... "detail.1":{name:"大米",price:40},
... "overview.address":"北京市丰台区南里道15号"
... }
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.order.find({_id:12}).pretty()
{
"_id" : 12,
"title" : "商品购物单5",
"amount" : 90,
"unit" : "元",
"detail" : [
{
"name" : "葡萄",
"price" : 60
},
{
"name" : "大米",
"price" : 40
}
],
"overview" : {
"shop" : "京东电子商务平台",
"shopno" : 5,
"address" : "北京市丰台区南里道15号"
}
}
#MongoDB数组下标从0开始
#引用数组或嵌入文档对象时,都需要加""号,中间用点号隔离
多文档修改
默认情况下update命令都执行修改一条文档动作,如果希望能同时修改所有符合条件的文档记录,需要采用multi选项。
> db.order.update(
{
"detail.name":"面粉","detail.price":{$lte:30}
},
{
$set:{
"detail.1":{name:"面粉",price:40}
}
},
{
multi:true
}
)
#修改所有面粉价格小于等于30的文档记录,把面粉价格改成40.
删除文档
- db.集合名.remove({查询条件}) # 删除符合条件的文档
- db.集合名.remove({}) # 删除全部数据
> db.tests.insertMany(
... [
... {item:"铅笔",price:2},
... {item:"钢笔",price:60}
... ]
... )
> db.tests.remove( { price:{$lt:3} } )
WriteResult({ "nRemoved" : 1 })
> db.tests.find()
{ "_id" : ObjectId("5e29b868aea6d6e19a603530"), "item" : "钢笔", "price" : 60 }
> db.tests.remove( { } )
WriteResult({ "nRemoved" : 1 })
> db.tests.find()
#如果要删除整个集合,采用db.tests.drop()方法效率更高,它会把整个集合和索引一起删除
MongoDB常用配置参数
您可以在启动时使用配置文件进行配置mongod和mongos实例。配置文件包含与mongod和mongos命令行选项等效的设置。使用配置文件让管理mongod和mongos选项更加容易,尤其是对于大规模部署而言。
在Linux上,配置文件为/etc/mongod.conf。
MongoDB配置文件使用YAML格式,YAML不支持缩进的制表符:请改用空格。下面是一个样例:
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1
port: 27017
setParameter:
enableLocalhostAuthBypass: false
...
官方配置参数位置: https://docs.mongodb.com/manual/reference/configuration-options/
核心部分
1. systemLog
systemLog:
verbosity: <int> #日志详细程度,0-5,默认为0
quiet: <boolean>
traceAllExceptions: <boolean>
syslogFacility: <string>
path: <string> #日志文件路径
logAppend: <boolean> #将新条目追加到现有日志文件的末尾。如果没有此选项,将备份现有日志并创建一个新文件;
logRotate: <string>
destination: <string> #MongoDB将所有日志输出发送到的目标。指定 file或syslog。如果指定file,则还必须指定 systemLog.path。
timeStampFormat: <string> #日志时间戳格式:ctime、iso8601-utc(默认值)、iso8601-local
component:
accessControl:
verbosity: <int>
command:
verbosity: <int>
replication:
verbosity: <int>
election:
verbosity: <int>
heartbeats:
verbosity: <int>
initialSync:
verbosity: <int>
rollback:
verbosity: <int>
storage:
verbosity: <int>
journal:
verbosity: <int>
recovery:
verbosity: <int>
write:
verbosity: <int>
2. processManagement
processManagement:
fork: <boolean> #是否为后台守护进程方式启动,默认值为false
pidFilePath: <string> #指定本地pidfile
timeZoneInfo: <string>
3. net
网络配置部分,4.2版本做了更改,不建议使用ssl选项,而推荐使用tls选项
net:
port: <int> #侦听端口,默认27017
bindIp: <string> #绑定的IP地址,可以是主机名、IP地址或unix socket文件,默认localhost
bindIpAll: <boolean> #是否绑定到所有的IP地址,默认false
maxIncomingConnections: <int> #接收的最大连接数,如果高于操作系统的配置,则无效,默认值65536
wireObjectCheck: <boolean> #默认为true,在收到客户端提交的请求时,进行内容验证,以防止客户端将错误或无效的BSON数据插入MongoDB数据库。
ipv6: <boolean> #设置为true为启用IPV6支持,默认为false
unixDomainSocket:
enabled: <boolean> #启用或禁用unix socket侦听,默认为true
pathPrefix: <string>
filePermissions: <int>
tls:
certificateSelector: <string> #Windows和macOS上使用
clusterCertificateSelector: <string>
mode: <string> #开启TLS用于所有的网络连接。disabled、allowTLS、preferTLS、requireTLS
certificateKeyFile: <string> #包含TLS证书和密钥的.pem文件
certificateKeyFilePassword: <string> #解密证书文件的密码
clusterFile: <string>
clusterPassword: <string>
CAFile: <string> #包含来自证书颁发机构的根证书链的.pem文件。使用相对或绝对路径指定.pem文件的文件名
clusterCAFile: <string>
CRLFile: <string> #包含证书吊销列表的.pem文件。使用相对或绝对路径指定.pem文件的文件名。
allowConnectionsWithoutCertificates: <boolean> #对于不存在证书的客户端,mongos或mongod在建立连接时会绕过TLS/SSL证书验证。
allowInvalidCertificates: <boolean>
allowInvalidHostnames: <boolean>
disabledProtocols: <string>
FIPSMode: <boolean>
compression:
compressors: <string> #mongod或mongos实例间通信的默认压缩程序
serviceExecutor: <string>
mode 值 | 描述 |
---|---|
disabled | 服务器不使用TLS |
allowTLS | 服务器之间的连接不使用TLS,对于进来的连接,服务器接收TLS和no-TLS |
preferTLS | 服务器之间的连接使用TLS,对于进来的连接,服务器接收TLS和no-TLS |
requireTLS | 服务器仅使用和接收TLS加密连接 |
net.ssl选项
net:
ssl: # deprecated since 4.2
sslOnNormalPorts: <boolean> # deprecated since 2.6
mode: <string>
PEMKeyFile: <string>
PEMKeyPassword: <string>
certificateSelector: <string>
clusterCertificateSelector: <string>
clusterFile: <string>
clusterPassword: <string>
CAFile: <string>
clusterCAFile: <string>
CRLFile: <string>
allowConnectionsWithoutCertificates: <boolean>
allowInvalidCertificates: <boolean>
allowInvalidHostnames: <boolean>
disabledProtocols: <string>
FIPSMode: <boolean>
security 选项
在生产环境中,必须要重视MongoDB数据库应用的网络安全问题。
security:
keyFile: <string>
clusterAuthMode: <string>
authorization: <string> #启用或禁用基于角色的访问控制(RBAC)以控制每个用户对数据库资源和操作的访问。默认disabled
transitionToAuth: <boolean>
javascriptEnabled: <boolean>
redactClientLogData: <boolean>
clusterIpSourceWhitelist:
- <string>
sasl: #simple authentication and security layer
hostName: <string>
serviceName: <string>
saslauthdSocketPath: <string>
enableEncryption: <boolean> #企业版才会支持
encryptionCipherMode: <string>
encryptionKeyFile: <string>
kmip: #企业版支持,密钥管理互操作协议(key management interoperability protocol)
keyIdentifier: <string>
rotateMasterKey: <boolean>
serverName: <string>
port: <string>
clientCertificateFile: <string>
clientCertificatePassword: <string>
clientCertificateSelector: <string>
serverCAFile: <string>
ldap: #轻量级目录访问互操作协议(Lightweight Directory Access Protocol),企业版才可以使用
servers: <string>
bind:
method: <string>
saslMechanisms: <string>
queryUser: <string>
queryPassword: <string>
useOSDefaults: <boolean>
transportSecurity: <string>
timeoutMS: <int>
userToDNMapping: <string>
authz:
queryTemplate: <string>
validateLDAPServerConfig: <boolean>
storage 选项
存储配置包括了对硬盘和内存的各种操作性能约束的配置
storage:
dbPath: <string> #实例存储数据的目录
indexBuildRetry: <boolean> #指定mongod是否在下次启动时重建不完整的索引,默认为true
journal:
enabled: <boolean> #启用或禁用journal日志以确保数据文件保持有效和可恢复
commitIntervalMs: <num>
directoryPerDB: <boolean> #如果为true,MongoDB将使用单独的目录存储每个数据库的数据。
syncPeriodSecs: <int> #数据刷新到数据库文件的时间间隔,默认60秒
engine: <string> #数据库存储引擎,默认wiredTiger,4.2版本后移除了MMAPv1存储引擎
wiredTiger:
engineConfig:
cacheSizeGB: <number> #设置数据在内存中的缓存空间的大小。
journalCompressor: <string>
directoryForIndexes: <boolean>
maxCacheOverflowFileSizeGB: <number>
collectionConfig:
blockCompressor: <string>
indexConfig:
prefixCompression: <boolean>
inMemory:
engineConfig:
inMemorySizeGB: <number>
用户管理
默认情况下,MongoDB没有开启访问控制,如果开启了访问控制,请确保在admin数据库中有一个具有userAdmin或userAdminAnyDatabase角色的用户。此用户可以管理用户和角色,例如:创建用户、授予或撤消用户的角色,以及创建或修改自定义角色。
开启访问控制
下面就添加一个管理员用户,并开启访问控制
实施步骤:
添加管理员角色
use admin
db.createUser(
{
user: "admin",
pwd: "Com.123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
查看创建的用户
show users
{
"_id" : "admin.admin",
"userId" : UUID("60585dbb-82b1-464c-91a0-2a600361c869"),
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
关闭MongoDB实例,并启用访问控制
使用带访问控制的shell命令启动
或者更改配置文件,启用认证db.adminCommand( { shutdown: 1 } )
mongod --auth --port 27017 --dbpath /var/lib/mongo
[root@slave01 ~]# vim /etc/mongod.conf
security:
authorization: enabled
连接数据库,两种方式认证
连接期间提供认证信息
连接后再进行认证[root@slave01 ~]# mongo --port 27017 --authenticationDatabase "admin" -u "admin" -p
MongoDB shell version v4.2.2
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3b80127d-99f8-4b73-8982-4e2f7a19a8b7") }
MongoDB server version: 4.2.2
> show tables
books
mytest
order
tests
>
[root@slave01 ~]# mongo
MongoDB shell version v4.2.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cc7966ec-5b07-45bb-b7d4-282b6b81b5cd") }
MongoDB server version: 4.2.2
> show tables
Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
> use admin
switched to db admin
> db.auth("admin","Com.123456")
1
> show tables
system.users
system.version
> use test
switched to db test
> show tables
books
mytest
order
tests
>
认证成功后,根据需要创建其他角色
use test
db.createUser(
{
user: "myTester",
pwd: "Com.123456",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
使用新创建的用户进行连接
mongo --port 27017 -u "myTester" --authenticationDatabase "test" -p
插入数据进行测试
db.foo.insert( { x: 1, y: 1 } )
数据备份及恢复
利用MongoDB自带的Mongodump工具可以实现指定数据库备份,也可以通过mongoexport工具实现指定集合备份。
数据库备份及恢复
备份
mongodump工具常用选项:
- -h dbhost:需要备份数据库所在的位置,远程服务器使用IP:PORT形式或者域名加端口形式
- -d dbname:需要备份的数据库名
- -o 备份目标位置(需要提前存在)
- -u 用户名(需要加引号)
- -p 密码(需要加引号)
[root@slave01 ~]# mkdir /backup
[root@slave01 ~]# mongodump -d test -o /backup -u "myTester" -p "Com.123456"
[root@slave01 ~]# tree /backup/
/backup/
└── test
├── books.bson
├── books.metadata.json
├── foo.bson
├── foo.metadata.json
├── mytest.bson
├── mytest.metadata.json
├── order.bson
├── order.metadata.json
├── tests.bson
└── tests.metadata.json
恢复
mongorestore工具常用选项:
- -h dbhost:需要恢复节点的服务器地址加端口号
- -d dbname:需要恢复的数据库名,恢复时允许跟备份时的名称不一样
- -u 用户名(需要加引号)
- -p 密码(需要加引号)
- –authenticationDatabase:指定认证数据库
[root@slave01 ~]# mongorestore -d test4 /backup/test/ -u "admin" -p "Com.123456" --authenticationDatabase admin
2020-01-26T20:09:50.735+0800 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2020-01-26T20:09:50.736+0800 building a list of collections to restore from /backup/test dir
2020-01-26T20:09:50.736+0800 reading metadata for test4.order from /backup/test/order.metadata.json
2020-01-26T20:09:50.748+0800 restoring test4.order from /backup/test/order.bson
2020-01-26T20:09:50.751+0800 reading metadata for test4.books from /backup/test/books.metadata.json
2020-01-26T20:09:50.751+0800 reading metadata for test4.foo from /backup/test/foo.metadata.json
2020-01-26T20:09:50.751+0800 no indexes to restore
2020-01-26T20:09:50.751+0800 finished restoring test4.order (2 documents, 0 failures)
2020-01-26T20:09:50.752+0800 reading metadata for test4.tests from /backup/test/tests.metadata.json
2020-01-26T20:09:50.752+0800 reading metadata for test4.mytest from /backup/test/mytest.metadata.json
2020-01-26T20:09:50.765+0800 restoring test4.tests from /backup/test/tests.bson
2020-01-26T20:09:50.766+0800 restoring test4.books from /backup/test/books.bson
2020-01-26T20:09:50.766+0800 no indexes to restore
2020-01-26T20:09:50.766+0800 finished restoring test4.tests (0 documents, 0 failures)
2020-01-26T20:09:50.767+0800 no indexes to restore
2020-01-26T20:09:50.767+0800 finished restoring test4.books (7 documents, 0 failures)
2020-01-26T20:09:50.777+0800 restoring test4.foo from /backup/test/foo.bson
2020-01-26T20:09:50.783+0800 no indexes to restore
2020-01-26T20:09:50.783+0800 finished restoring test4.foo (1 document, 0 failures)
2020-01-26T20:09:50.789+0800 restoring test4.mytest from /backup/test/mytest.bson
2020-01-26T20:09:50.793+0800 no indexes to restore
2020-01-26T20:09:50.793+0800 finished restoring test4.mytest (1 document, 0 failures)
2020-01-26T20:09:50.793+0800 11 document(s) restored successfully. 0 document(s) failed to restore.
上面的案例将备份的数据库恢复到了test4数据库。
集合备份及恢复过程
可以通过MongoDB自带的mongoexport、mongoimport工具,实现指定集合数据的备份及恢复。
mongoexport 为导出指定数据库集合工具,其导出数据文件数据格式为JSON或CSV,导出文件扩展名可以指定为.JSON或.CSV。
常用选项:
- -h:服务器地址,可以采用IP:Port形式
- -d:数据库名称
- -c:集合名称
- -f:指定需要导出的字段名称,默认为所有
- -o:指定需要导出的文件名
[root@slave01 ~]# mongoexport -d test -c books -o /backup/test/test.books.json -u "admin" -p "Com.123456" --authenticationDatabase admin
2020-01-26T20:17:38.919+0800 connected to: mongodb://localhost/
2020-01-26T20:17:38.921+0800 exported 7 records
[root@slave01 ~]# cat /backup/test/test.books.json
{"_id":{"$oid":"5e0cb711eb18ea3208bc19a8"},"name":"C语言编程","price":32.0}
{"_id":{"$oid":"5e0cb746eb18ea3208bc19a9"},"name":"Python入门","price":48.0}
{"_id":{"$oid":"5e0cb8e0eb18ea3208bc19aa"},"name":"Java学习","price":65.0}
{"_id":{"$oid":"5e0cbbd2eb18ea3208bc19b7"},"name":"小学生教材","price":20.0}
{"_id":{"$oid":"5e0cbbd2eb18ea3208bc19b8"},"name":"初中生教材","price":30.0}
{"_id":{"$oid":"5e0cbbd2eb18ea3208bc19b9"},"name":"高中生教材","price":40.0}
{"_id":{"$oid":"5e0cbc16eb18ea3208bc19ba"},"name":"英文教材","price":49.0}
mongoimport为导入指定集合数据工具,其导入文件扩展名为.JSON或.CSV。
[root@slave01 ~]# mongoimport -d test -c books --file=/backup/test/test.books.json -u "admin" -p "Com.123456" --authenticationDatabase="admin"
2020-01-26T20:27:10.315+0800 connected to: mongodb://localhost/
2020-01-26T20:27:10.320+0800 7 document(s) imported successfully. 0 document(s) failed to import.