开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2320人左右 1 + 2 + 3 + 4 + 5 + 6 + 7) (1 2 3 4 5 均没有空位了,请不要在问了谢谢)
接着上期,我们继续看相关的MongoDB的基本命令
1 查看当前的数据库以及数据库大小,这里注明,这里展示的大小是数据库存储在磁盘上的大小也就是压缩后的大小,不是解压缩后的大小。
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
>
2 查看当前的数据库的collections ,通过show collections 命令
3 对于collection 的状态进行查看,这个命令主要是来获得集合的内部一些x信息比如索引,或者此文档加了约束都可以通过这个命令来查看
db.getCollectionInfos( { name: "myCollection" } )
[
{
"name" : "myCollection",
"type" : "collection",
"options" : {
"validator" : {
"$jsonSchema" : {
"bsonType" : "object",
"required" : [
"name",
"age"
],
"properties" : {
"name" : {
"bsonType" : "string",
"description" : "must be a string and is required"
},
"age" : {
"bsonType" : "int",
"minimum" : 18,
"description" : "must be an integer and is required"
}
}
}
}
},
"info" : {
"readOnly" : false,
"uuid" : UUID("38fd5e3d-bfaf-4e41-9809-fc8fec564fa6")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
]
>
4 查询collection 中的collection的大小和状态
> db.myCollection.stats()
{
"ns" : "test.myCollection",
"size" : 153,
"count" : 1,
"avgObjSize" : 153,
"storageSize" : 20480,
"freeStorageSize" : 0,
"capped" : false,
"wiredTiger" : {
"metadata" : {
"formatVersion" : 1
},
> db.test.insertOne({
... name: "John",
... age: 30,
... status: "active"
... });
{
"acknowledged" : true,
"insertedId" : ObjectId("61f823cafa8251f3e6306e30")
}
> db.test.findOne()
{
"_id" : ObjectId("61f823cafa8251f3e6306e30"),
"name" : "John",
"age" : 30,
"status" : "active"
}
> db.test.deleteOne({name:"John"})
{ "acknowledged" : true, "deletedCount" : 1 }
>
> db.test.findOne()
null
>
var collection = db.mytest;
>
> // 定义要插入的文档
> var documents = [
... { _id: 1, name: "John", age: 30 },
... { _id: 2, name: "Jane", age: 25 },
... { _id: 3, name: "Doe", age: 35 }
... ];
>
> // 构造插入操作
> var bulkInsert = documents.map(doc => ({
... insertOne: { document: doc }
... }));
>
> // 执行批量写操作
> collection.bulkWrite(bulkInsert);
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 3,
"matchedCount" : 0,
"upsertedCount" : 0,
"insertedIds" : {
"0" : 1,
"1" : 2,
"2" : 3
},
"upsertedIds" : {
}
}
> // 构造替换操作
> var bulkReplace = [
... { replaceOne :
... {
... filter: { _id: 1 },
... replacement: { name: "John", age: 80 }
... }
... },
... { replaceOne :
... {
... filter: { _id: 2 },
... replacement: { name: "Jane", age: 70 }
... }
... }
... ];
>
> // 执行批量写操作
> collection.bulkWrite(bulkReplace);
{
"acknowledged" : true,
"deletedCount" : 0,
"insertedCount" : 0,
"matchedCount" : 2,
"upsertedCount" : 0,
"insertedIds" : {
},
"upsertedIds" : {
}
}
> db.mytest.find();
{ "_id" : 1, "name" : "John", "age" : 80 }
{ "_id" : 2, "name" : "Jane", "age" : 70 }
{ "_id" : 3, "name" : "Doe", "age" : 35 }
>
> var collection = db.mytest;
>
> // 构造删除操作
> var bulkDelete = [
... { deleteOne :
... {
... filter: { _id: 1 }
... }
... },
... { deleteOne :
... {
... filter: { _id: 2 }
... }
... }
... ];
>
> // 执行批量写操作
> collection.bulkWrite(bulkDelete);
{
"acknowledged" : true,
"deletedCount" : 2,
"insertedCount" : 0,
"matchedCount" : 0,
"upsertedCount" : 0,
"insertedIds" : {
},
"upsertedIds" : {
}
}
> db.mytest.find();
{ "_id" : 3, "name" : "Doe", "age" : 35 }
>
db.getCollectionNames().forEach(function(collection) {
var stats = db.getCollection(collection).stats();
print("Collection: " +collection + ", Size: " + (stats.size/1024/1024).toFixed(2) + " MB");
});
在MongoDB中很多的命令需要进行组合,通过一些javascript的方式将我们需要的结果,一次性获得,上面就是一个典型的案例。
下面是一条获得当前数据库下所有表的索引的方法这里采用了两次的循环
db.getCollectionNames().forEach(function(collection) {
var dbAndCollection = db.getName() + "." + collection;
var indexes = db.getCollection(collection).getIndexes();
indexes.forEach(function(index) {
print("Database: " + dbAndCollection + ", Index Name: " + index.name + ", Index Fields: " + JSON.stringify(index.key));
});
});
另外我们在操作mongodb的时候,经常被问及,到底有多少连接是活跃的,那可和mysql不一样,直接运行 show processlist;
var operations = db.currentOp();
var totalConnections = operations.inprog.length;
var activeConnections = 0;
print("当前活跃连接:");
operations.inprog.forEach(function(op) {
if (op.active && op.op !== "none") {
activeConnections++;
print("操作:" + op.op + " | 集合:" + op.ns + " | 批处理大小:" + (op.currentop && op.currentop.batchSize ? op.currentop.batchSize : "N/A") + " | 主机:" + (op.client ? op.client : "N/A") + " | 当前操作时间:" + new Date(op.opid.ts).toString());
}
});
print("总连接数:" + totalConnections + " | 活跃连接数:" + activeConnections);
但mongodb 有javascript程序可以进行一些复杂输出后的格式化,这里通过将db.currentOp()来进行解析出活跃的连接的信息
var operations = db.currentOp();
var totalConnections = operations.inprog.length;
var activeConnections = 0;
print("当前活跃连接:");
operations.inprog.forEach(function(op) {
if (op.active && op.op !== "none") {
activeConnections++;
print("操作:" + op.op + " | 集合:" + op.ns + " | 批处理大小:" + (op.currentop && op.currentop.batchSize ? op.currentop.batchSize : "N/A") + " | 主机:" + (op.client ? op.client : "N/A") + " | 当前操作时间:" + new Date(op.opid.ts).toString());
}
});
print("总连接数:" + totalConnections + " | 活跃连接数:" + activeConnections);
置顶文章:
往期热门文章:
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话
感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能
PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定
PostgreSQL 熊灿灿一句话够学半个月 之 KILL -9
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一 (阿里云组团PK笔者实录)
临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底 为什么?
临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)