热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mongodb数据库常用命令介绍

(1)对于初学者,要善于使用help命令,然后看命令注释,helpdb.help()helpondbmethodsdb.mycoll.help()helponcollectionmethodsrs.help()helponreplicasetmethodshelpconnectconnectingtoadbhelphe

(1)对于初学者,要善于使用help命令,然后看命令注释,

> help

       db.help()                   help on db methods

       db.mycoll.help()            help on collection methods

       rs.help()                   help on replica set methods

       help connect                connecting to a db help

       help admin                  administrative help

       help misc                   misc things to know

       show dbs                    show database names

       show collections            show collections in current database

       show users                  show users in current database

       show profile                show most recent system.profile entries with time >= 1ms

       use                set current database

       db.foo.find()               list objects in collection foo

       db.foo.find( { a : 1 } )    list objects in foo where a == 1

       it                          result of the last line evaluated; use to further iterate

       exit                        quit the mongo shell

(2)一个服务器上可以包含多个数据库(dbs),一个db包含多个集合(collections),此结构与mysql非常类似,当然在关系型数据库mysql中,是不存在集合的概念的,而mongodb中db ,collection都是隐式创建的

> show dbs //列出当前服务器的所有数据库

admin

local

richinfo

test

> use test1  //切换数据库

switched to db test1

> db     //显示当前数据库

test1

> show collections //列出当前数据库中所有的集合

> db.ee_info.save({name:"gabriel",position:"DBA",age:29,sex:"F"});

> show collections

ee_info

system.indexes

> show dbs

admin

local

richinfo

test

test1

以上隐式创建了一个test1 的db; ee_info的集合。

(3) mongodb的数据库复制功能db.copyDatabase() 可以在local和remote服务器上进行数据库的复制,db.cloneDatabase()也可以实现remote数据库的复制。

> show dbs

admin

local

richinfo

test

test1

> db.copyDatabase("test1","test2");

{ "ok" : 1 }

> show dbs

admin

local

richinfo

test

test1

test2

> use test2

switched to db test2

> db.ee_info.find();

{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }

> db.dropDatabase();

{ "dropped" : "test2", "ok" : 1 }

> show dbs

admin

local

richinfo

test

test1

(4) 使用getSisterDB()获取其他数据库的引用,一般情况下我们使用use语句可以实现数据库的切换,但是如果我们在current database A 操作database B中的集合,getSisterDB()就能很好的引用

> use test

switched to db test

> db

test

> test1.ee_info.find();

Thu Jul 7 16:21:41 ReferenceError: test1 is not defined (shell):0

> test1=db.getSisterDB("test1");

test1

> test1.ee_info.find();

{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }

> db

Test

(4)作为DBA可以使用fsync强制性的将内存中的数据写于数据文件。Asymc表示异步写

> db.runCommand({fsync:1});

{ "errmsg" : "access denied; use admin db", "ok" : 0 }

> use admin

switched to db admin

> db.runCommand({fsync:1});

{ "numFiles" : 8, "ok" : 1 }

> db.runCommand({fsync:1,async:true});

{ "numFiles" : 8, "ok" : 1 }

(5)作为DBA有时为了备份,整理数据库,需要将系统锁定,mongodb的锁定模式也不进行读阻塞。以下用3个session模拟锁机制

Session1 锁定操作:

> db

admin

> db.copyDatabase("test1","test2");

{ "ok" : 1 }

> show dbs

admin

local

richinfo

test

test1

test2

> db.runCommand({fsync:1,lock:1});

{

       "info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",

       "ok" : 1

}

>

Session2:

[mongodb@tes102 ~]$ cd /soft/mongodb-linux-x86_64-1.6.5/bin/

[mongodb@tes102 bin]$ ./mongo 192.168.18.102:10001

MongoDB shell version: 1.6.5

connecting to: 192.168.18.102:10001/test

> use test1

switched to db test1

> db.ee_info.find(); //读没有阻塞

{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }

> db.ee_info.save({name:"wangxiangtao",age:23}); //写已经产生等待

Session3

[root@tes102 ~]# su - oracle

su: user oracle does not exist

[root@tes102 ~]# su - mongodb

[mongodb@tes102 ~]$ cd /soft/mongodb-linux-x86_64-1.6.5

[mongodb@tes102 mongodb-linux-x86_64-1.6.5]$ cd bin/

[mongodb@tes102 bin]$ ./mongo 192.168.18.102:10001

MongoDB shell version: 1.6.5

connecting to: 192.168.18.102:10001/test

> use test2

switched to db test2

> db.ee_info.find();

^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A // 直接等待

-----------------------在session1 直接解锁,session2,session3均恢复正常

> db.$cmd.sys.unlock.findOne();

{ "ok" : 1, "info" : "unlock requested" }

>

在session3中查找数据:

> test2=db.getSisterDB("test2");

test2

> db.ee_info.find();

{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }

{ "_id" : ObjectId("4e1571770a2bdd1c776e5239"), "name" : "wangxiangtao", "age" : 23 }

> test1=db.getSisterDB("test1");

test1

> db.ee_info.find();

{ "_id" : ObjectId("4e155c1ec26522805e8d4d6e"), "name" : "gabriel", "position" : "DBA", "age" : 29, "sex" : "F" }

{ "_id" : ObjectId("4e1571770a2bdd1c776e5239"), "name" : "wangxiangtao", "age" : 23 }

>

(5)验证集合的正确性:

 > show collections

system.indexes

tt

> db.tt.validata();

Thu Jul 7 17:22:02 TypeError: db.tt.validata is not a function (shell):0

> db.tt.validate();

{

       "ns" : "blog.tt",

       "result" : "\nvalidate\n firstExtent:0:2500 ns:blog.tt\n lastExtent:0:2500 ns:blog.tt\n # extents:1\n datasize?:52 nrecords?:1 lastExtentSize:3328\n padding:1\n first extent:\n   loc:0:2500 xnext:null xprev:null\n   nsdiag:blog.tt\n   size:3328 firstRecord:0:25b0 lastRecord:0:25b0\n 1 objects found, nobj:1\n 68 bytes data w/headers\n 52 bytes data wout/headers\n deletedList: 0000000100000000000\n deleted: n: 1 size: 3084\n nIndexes:1\n   blog.tt.$_id_ keys:1\n",

       "ok" : 1,

       "valid" : true,

       "lastExtentSize" : 3328

}

>

总结:mongodb与oracle mysql比起来,差距还是蛮大的,特别从lock的测试中可以看出,一个会话等待,另外一个会话的读也阻塞了。

路漫漫,生活继续,工作继续………………………………….


推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了Mongodb副本集+分片集群搭建相关的知识,希望对你有一定的参考价值。环境需求: ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • hackingTeam是如何被黑的
    hackingTeam是如何被黑的 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
  • 一、前言在数据库中,慢查询日志通常是用来进行优化数据库,MySQL中存在慢查询,Mongodb中也是如此。在Mongo中的慢查询属于Mon ... [详细]
  • Abp+MongoDb改造默认的审计日志存储位置
    一、背景在实际项目的开发当中,使用AbpZero自带的审计日志功能写入效率比较低。其次审计日志数据量中后期十分庞大,不适合与业务数据存放在一起。所以我们可以重新实现A ... [详细]
  •     系统采用jeeplus框架(ssm+redis+shiro+mongodb+redis),默认是做了JSP未做前后端分离,由于业务需要已经多终端使用的需求(H5、小程序等) ... [详细]
  • mongoDB高可用集群环境搭建
    2019独角兽企业重金招聘Python工程师标准在生产环境下,部署一台mongodb服务的话,会存在以下问题:单点问题生产环境是一个 ... [详细]
  • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
author-avatar
手机用户2502886745
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有