MongoDB增删改查
1:Mongodb 中关键字种类
db(数据库实例级别)
db 本身
db.connection 数据库下的集合信息
db.collection.xxx(
rs(复制集级别)
sh(分片级别)
1:查询操作
注意,以下所有操作,都是基于用户认证关闭的配置来进行的,配置如下所示:
[root@mongodb mongo]# cat bin/mongo.conf
dbpath=/usr/local/mongo/data/db
logpath=/usr/local/mongo/logs/mongodb.log
fork=true
auth=true
bind_ip=0.0.0.0
在客户端指定数据库进行连接:(默认连接本机 test 数据库)
[root@mongodb ~]# mongo
MongoDB shell version v5.0.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("95b5f33b-9b57-42a4-b3de-b9652e699265") }
MongoDB server version: 5.0.6
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
> db
test
解决一下进入之后的烦人提示:
[root@mongodb ~]# echo nerver > /sys/kernel/mm/transparent_hugepage/defrag
[root@mongodb ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@mongodb ~]# systemctl restart mongod
1:查看当前数据库版本
> db.version()
5.0.6
2:切换数据库
> use admin
switched to db admin
3:显示当前数据库
> db
admin
> db.getName()
admin
4:查询所有数据库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> show databases
admin 0.000GB
config 0.000GB
local 0.000GB
5:查看 admin 数据库当前状态
> use admin
switched to db admin
> db.stats()
{
"db" : "admin",
"collections" : 1,
"views" : 0,
"objects" : 1,
"avgObjSize" : 59,
"dataSize" : 59,
"storageSize" : 16384,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 16384,
"fsUsedSize" : 13630574592,
"fsTotalSize" : 210031038464,
"ok" : 1
}
6:查看当前数据库的连接机器地址
> db.getMongo()
connection to 127.0.0.1:27017
2:数据管理
1,创建数据库
> use devopsdu
switched to db devopsdu
# 说明:
当 use 的时候,系统就会自动创建一个数据库。
如果 use 之后没有创建任何集合。系统就会删除这个数据库
2:删除数据库
> db
eryajf
> show dbs
admin 0.000GB
config 0.000GB
devopsdu 0.000GB
local 0.000GB
> db.dropDatabase()
{ "dropped" : "devopsdu", "ok" : 1 }
# 说明:
删除数据库:如果没有选择任何数据库,会删除默认的 test 数据库
3:创建集合
方法一:
> use devopsdu
switched to db devopsdu
> db.createCollection('a')
{ "ok" : 1 }
> db.createCollection('b')
{ "ok" : 1 }
查看当前数据下的所有集合
> show collections
a
b
> db.getCollectionNames()
[ "a", "b" ]
方法二:
当插入一个文档的时候,一个集合就会自动创建。
> db.c.insert({name:'devopsdu'})
WriteResult({ "nInserted" : 1 })
> db.c.insert({url:'http://www.cnblogs.com/devopsdu'})
WriteResult({ "nInserted" : 1 })
查看创建的合集
> db.getCollectionNames()
[ "a", "b", "c" ]
查看合集里的内容
> db.c.find()
{ "_id" : ObjectId("5d1c48e5e6a475def02382cc"), "name" : "devopsdu" }
{ "_id" : ObjectId("5d1c48f9e6a475def02382cd"), "url" : "http://www.cnblogs.com/devopsdu" }
重命名集合
> db.c.renameCollection("devopsdu")
{ "ok" : 1 }
> db.getCollectionNames()
[ "a", "b", "devopsdu" ]
删除集合
> db.a.drop()
true
> db.getCollectionNames()
[ "b", "devopsdu" ]
插入 1w 行数据
> for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }
WriteResult({ "nInserted" : 1 })、
查询集合中的查询所有记录
> db.log.find()
注:默认每页显示 20 条记录,当显示不下的的情况下,可以用 it 迭代命令查询下一页数据。
> DBQuery.shellBatchSize=50; # 每页显示50条记录
> db.log.findOne() # 查看第1条记录
{
"_id" : ObjectId("5d1c4963e6a475def02382ce"),
"uid" : 0,
"name" : "mongodb",
"age" : 6,
"date" : ISODate("")
}
> db.log.count() # 查询总的记录数
10000
> db.log.find({uid:1000}) # 查询UUID为1000的数据
{ "_id" : ObjectId("5d1c4963e6a475def02386b6"), "uid" : 1000, "name" : "mongodb", "age" : 6, "date" : ISODate("") }
删除集合中的记录数
> db.log.distinct("name") # 查询去掉当前集合中某列的重复数据
[ "mongodb" ]
> db.log.remove({}) # 删除集合中所有记录
WriteResult({ "nRemoved" : 10000 })
> db.log.distinct("name")
[ ]
查看集合存储信息
> db.log.stats() # 查看数据状态
> db.log.dataSize() # 集合中数据的原始大小
> db.log.totalIndexSize() # 集合中索引数据的原始大小
> db.log.totalSize() # 集合中索引+数据压缩存储之后的大小
> db.log.storageSize() # 集合中数据压缩存储的大小