MongoDB 入门教学贴 从术语到操作 (基本操作 到 javascript 打印日常维护信息案例 内部培训贴)

文摘   2024-07-24 06:00   天津  

开头还是介绍一下群,如果感兴趣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
  },


——————————————————————————
普通插入或查询的语句,删除操作

1  插入一条数据,
    查询表内的数据(相当于select * from 表 limit 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



2 插入,更新,删除多个文档
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 }




以上是批量对于数据进行处理的方法。下面是针对一些复杂情况下的获得一些必要信息的命令或脚本

1 MongoDB 获得数据库中每个表的大小、
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);


置顶文章

MySQL 8.0x 到 9.0均可能崩溃--云厂商开发指责 MYSQL不测试就推新版本?
MongoDB 入门教学贴 从术语到操作 (用户权限 内部培训贴)
MongoDB 入门教学贴 单机的安装与设置 (内部培训贴)
PolarDB serverless 真敢搞,你出圈了你知道吗!!!!
PostgreSQL 14 小版本分析,有那个版本不建议使用
MongoDB  聚合怎么写,更复杂的聚合案例
MongoDB 谨献给说MongoDB 这不好那不好的“古董”  -- 发展与演进,从3 到 7 的卓越变化


往期热门文章:

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

临时工访谈:问金融软件开发总监  哪些业务不用传统数据库
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一
PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验

临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话

PostgreSQL 如何通过工具来分析PG 内存泄露

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:我很普通,但我也有生存的权利,大龄程序员 求职贴
临时工说: 快速识别 “海洋贝壳类” 数据库方法速递
临时工说:国产 数据库 销售人员  图鉴
临时工说:DBA 是不是阻碍国产数据库发展的毒瘤 ,是不是?从国产DB老专家的一条留言开始 (其实更好看的是文章下方的留言)

感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定

MongoDB 不是软柿子,想替换就替换

PostgreSQL  熊灿灿一句话够学半个月 之 KILL -9

MongoDB  挑战传统数据库聚合查询,干不死他们的

临时工说:国内数据库企业存活   “三板斧”

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一  (阿里云组团PK笔者实录

临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底  为什么?

临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)

临时工说:搞数据库 光凭的是技术,那DBA的死多少次?

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?
临时工说:分析当前经济形势下 DBA 被裁员的根因
PostgreSQL PG_DUMP 工作失败了怎么回事及如何处理
MySQL 八怪(高老师)现场解决问题实录
PostgreSQL 为什么也不建议 RR隔离级别,MySQL别笑
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
临时工访谈:恶意裁员后,一个国产数据库企业程序员的心声
临时工说:上云后给 我一个 不裁 DBA的理由
PolarDB for PostgreSQL  有意思吗?有意思呀
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
临时工说:裁员裁到 DBA 咋办  临时工教你 套路1 2 3
PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
MONGODB  ---- Austindatabases  历年文章合集
MYSQL  --Austindatabases 历年文章合集
POSTGRESQL --Austindatabaes 历年文章整理
POLARDB  -- Ausitndatabases 历年的文章集合
PostgreSQL  查询语句开发写不好是必然,不是PG的锅
SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)
PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。
当前已经发布文章1185


AustinDatabases
关于数据库相关的知识分享
 最新文章