连接
登录
# 连接时登陆
mongo -u 'admin' -p 'admin'
# 连接后登陆
rs0:PRIMARY> use admin
switched to db admin
rs0:PRIMARY> db.auth("admin", "admin" )
1
# url登陆
mongo mongodb://username:passwd@ip:port/dbname
查看连接数
rs:PRIMARY> db.serverStatus().connections
{
"current" : 232,
"available" : 50968,
"totalCreated" : 120914,
"active" : 1
}
当前连接数 “current” : 232
可用连接数 “available” : 50968
MongoDB一共创建线程数 “totalCreated” : 120914
备份和还原
数据备份
# dbName 代表实际数据库名称
# dumpPath 代表将要导出的数据位置
mongodump --quiet --host 127.0.0.1 --port 27017 -d dbName -c collection -o dumpPath
# 加密后备份
mongodump -d dbName -o dumpPath -u username -p password --authenticationDatabase admin
清空数据库
use dbName
db.dropDatabase();
数据导入
# dbName 代表实际数据库名称 data/path 代表每个数据库备份数据对应磁盘的实际存储位置
mongorestore -d dbName --dir data/path
导入导出
按过滤条件导出数据
mongoexport -h localhost --port 27017 -d dbName -c tableName -q '{ "createtime" : { "$gte" : ISODate("2021-05-28T00:00:00Z"), "$lt" : ISODate("2021-06-05T00:00:00Z") } }' -o ./output.json
导出指定字段
// --fields导出指定字段
mongoexport --host=127.0.0.1 --port=27017 -u root -p root1234 -d mydatabase -c user --query='{"age": 18}' --type=csv --fields=_id,name,age,city -o /root/user.csv
查询
显示表单
show tables
等价关系(如果表名为mongo关键字,则用第一种)
db.getCollection('A')
db.A
查询当前表单有多少条数据
db.dbName.count()
查询时间范围内的数据(数目)
db.getCollection("A").find({ "createtime" : { "$gte" : ISODate("2021-05-28T00:00:00Z"), "$lt" : ISODate("2021-06-05T00:00:00Z") } }).count()
db.getCollection("A").find({"createtime":{"$gte":1636905600000,"$lte":1636991999000}}).count()
更新
批量重命名key
将A表中的key upadtetime更新为updatetime
db.getCollection("A").updateMany({}, {$rename: {"upadtetime": "updatetime"}})
复制表中一列数据到另一列
将A表中的updatetime列批量复制为createtime列
db.A.find().forEach(function(item){
db.A.update({"_id":item._id},
{"$set": {"createtime":item.updatetime}},false,true)
})
按条件修改
db.A.updateMany({project: "60d1b11519736c32d5b5e67a", type: "area", index:""},{$set:{"index":"60d96afa7ec8600339f54e2b"}})
判断key值是否存在,存在则删除
db.getCollection('A').update({"mac":{$exists:true}},{$unset:{"mac":""}},{multi:true})
删除
删除字段(列)
db.getCollection('A').update({},{$unset:{"mac":""}},false,true)
删除某个值对应的记录(单一记录)
db.getCollection('A').remove({"key": "value"})
批量删除数组中的字段
删除robotId数组中匹配到robot的值
db.A.updateMany({}, {$pull: {robotId: { $regex: param.robot }}})
删除空数组
db.A.updateMany({robotId: []}, {$unset: {robotId: []}})
新增
新增字段
db.A.update({}, {$set: {"mac": ""}}, {multi: 1})
根据条件新增字段
db.faq.update({project: "60c809478e351427b7f972cb"}, {$set: {"faqs": ""}}, {multi: 1})
往数组中插入
upsert:没有则新增
如果想在原有数据添加,则第一个参数为原有数据的id:{_id: ObjectId()}
db.A.updateMany({}, $push: {robotId: rId}, { upsert: true })
聚合
aggregate聚合,unwind解构数组字段,group对文档分组
#根据项目计算每一个的数量,按数量从高到低
db.faq.aggregate(
{$match:{"project" : "60c809478e351427b7f972cb", "type" : /etc/mongod.conf"area"}},
{$unwind: "$datas"},
{$unwind: "$datas.keys"},
{$group: {_id: "$datas.keys", count:{$sum:1}}},
{$sort: { count : -1} }
)
# 根据项目计算去重后总量
db.faq.aggregate(
{$match:{"project" : "60c809478e351427b7f972cb"}},
{$unwind:"$datas"},
{$unwind:"$datas.keys"},
{$group:{_id: "$datas.keys"}},
{$group:{_id:1, count:{$sum:1}}}
)
设置密码
必须按顺序,先在mongo shell添加用户,再修改配置文件,重启mongo
命令行添加用户
use admin
db.createUser({user:"admin",pwd:"Ciot1688",roles:["root"]})
命令行出现报错:Error: couldn't add user: Use of SCRAM-SHA-256 requires undigested passwords
db.createUser({user:"admin",pwd:"Ciot1688",roles:["root"],mechanisms:["SCRAM-SHA-1"]})
修改配置文件/etc/mongod.conf
,开启加密
security:
authorization: enabled
创建数据库和集合
use test
# 创建表test
db.createCollection("test")
# 删除表test
db.test.drop()
# 删除数据库(需要先use test进入该数据库)
db.dropDatabase()
问题定位
mongotop