热门标签 | 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的测试中可以看出,一个会话等待,另外一个会话的读也阻塞了。

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


推荐阅读
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 本文介绍了如何使用Node.js通过两种不同的方法连接MongoDB数据库,包括使用MongoClient对象和连接字符串的方法。每种方法都有其特点和适用场景,适合不同需求的开发者。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了在尝试启动MySQL服务时,如果遇到错误提示‘MySQL未运行,但锁定文件(/var/lock/subsys/mysql)存在’应如何处理,包括具体的操作步骤和可能的原因分析。 ... [详细]
  • 本文探讨了在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社区 版权所有