MongoDB自带一个JavaScript shell,可以从命令行与MongoDB实例交互。这个 shell非常有用,通过它可以执行管理操作、检査运行实例,亦或做其他尝试。这个 mongo shell对于使用MongoDB来说是至关重要的工具,本书后面也会经常使用这 个工具。

  • 运行shell

运行mongo启动shell:

$ ./mongo
MongoDB shell version: 1.6.0 url: test
connecting to: test
type "help" for help

shell会在启动时自动连接MongoDB服务器,所以要确保在使用shell之前启动mongodo shell是功能完备的JavaScript解释器,可以运行任何JavaScript程序。为了证明这 一点,我们运行几个简单的数学运算:

>x = 200
200
>x / 5;
40

还可以充分利用JavaScript的标准库。

>Math.sin(Math.PI / 2);
1
>new Date(''2010/l/l");
"Fri Jan 01 2010 00:00:00 GMT-0500 (EST)»
>"Hello, World! " . replace ("World, "MongoDB"); Hello, MongoDB!

也可以定义和调用JavaScript函数:

>function factorial (n) {...if (n <= 1) return 1;
... return n * factorial(n - 1);
---}
>factorial(5);
120

注意,可以使用多行命令。这个shell会检测输入的JavaScript语句是否写完,如没 写完还可以在下一行接着写。

  • MongoDB 客户端

虽然能运行任意JavaScript程序很酷,但shell的真正威力还在于它是一个独立的Mongo- DB客户端。开启的时候,shell会连到MongoDB服务器的test数据库,并将这个数据 库连接赋值给全局变量dbo这个变量是通过sheU访问MongoDB的主要入口点。
shell还有些非JavaScript语法的扩展,是为了方便习惯于SQL shell的用户而添加 的。这些扩展并不提供额外的功能,但它们是很棒的语法糖。例如,最重要的操作 之一就是选择要使用的数据库:

>use foobar
switched to db foobar

现在如果看看db,会发现其指向foobar数据库:

>db
foobar

因为这是一个JavaScript shell,所以键入一个变量会将变量的值转换为字符串(这 里就是数据库名)并打印出来。
可以通过db变量来访问其中的集合。例如db.baz返回当前数据库的baz集合。既然 现在可以在shell中访问集合,那么基本上就可以执行几乎所有的数据库操作了。

  • shell中的基本操作

在shell査看操作数据会用到4个基本操作:创建、读取、更新和删除(CRUD)。

  • 1.创建

insert函数添加一个文档到集合里面。例如,假设要存储一篇博客文章。首先, 创建一个局部变量post,内容是代表文档的JavaScript对象。里面会有"title", “content"和"date”(发表日期)几个键。

>post = ( nti11 e11 : "My Blog Post11,
..."content" : "Here's my blog post.",
...ndate11 : new Date () }
(
"title" : "My Blog Post",
"content" : "Here * s my blog post.H,
"date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)"
}

这个对象是个有效的MongoDB文档,所以可以用insert方法将其保存到blog集 合中:

>db ..blog. insert (post)

这篇文章已经被存到数据库里面了。可以调用集合的find方法来査看一下:

>db.blog.find()
(
: Objectld(,,4b2 3c3ca752 5f35f94b6 0a2d"),
: "My Blog Post",
"content" : "Here 1s my blog post.",
"date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)"
}

除了我们输入的键/值对都完整地被保存下来,还有一个额外添加的键»_id"o本 章的最后会解释"_id"突然出现的原因。

  • 2.读取

find会返回集合里面所有的文档。若只是想査看一个文档,可以用findOne:

>db.blog.findOne()
{"_id" : Objectld( ''4b2 3c3ca7525f3 5f94b60a2d»),"title11 : "My Blog Post","content” : "Here's my blog post.","date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)"
}

find和f indOne可以接受査询文档形式的限定条件。这将通过査询限制匹配的文 档。使用find时,shell自动显示最多20个匹配的文档,但可以获取更多文档。

  • 3.更新

如果要更改博客文章,就要用到update To update接受(至少)两个参数:第一 个是要更新文档的限定条件,第二个是新的文档。假设决定给我们先前写的文章增 加评论内容,则需要增加一个新的键,对应的值是存放评论的数组。
第一步修改变量post,增加"comments"键:

>post.comments = []
[]

然后执行update操作,用新版本的文档替换标题为aMy Blog Post"的文章:

>db.blog.update((title : "My Blog Post"}, post)

文档已经有了”comments”键。再用find査看一下,可以看到新的键:

>db.blog.find()
{"_id": ObjectId(M4b23c3ca7525f35f94b60a2dn),"title" : "My Blog Post"t"content" : MHere's my blog post.","date" : "Sat Dec 12 2009 11:23:21 GMT-0500 (EST)","comments":[]
}
  • 4.删除

remove用来从数据库中永久性地删除文档。在不使用参数进行调用的情况下,它 会删除一个集合内的所有文档。它也可以接受一个文档以指定限定条件。例如,下 面的命令会删除我们刚刚创建的文章:

>db.blog.remove((title : "My Blog Post"})

集合现在又是空的了。

  • 使用shell的窍门

由于mongo是个JavaScript shell,通过在线査看JavaScript的文档能获得很多帮助。 shell本身内置了帮助文档,可以通过help命令査看。

>help
HELP
show dbs    show database names
show collections in current database
show users in current database
show recent system.profile entries w. time >= Iras set current database to <db name>
help on DB methods
help on collection methods  .
list objects in collection foo
list objects in foo where a == 1
result of the last line evaluated

使用db.help ()可以査看数据库级别的命令的帮助,集合的相关帮助可以通过db. foo. help ()来査看。
有个了解函数功用的技巧,就是在输入的时候不要输括号。这样就会显示该函数的 JavaScript源代码。例如,如果想看看update的机理,或者就是为了看看参数顺 序,可以这么做:

> db.foo.update function (query, obj, upsert, multi) {assert(query, Mneed a query");assert(obj, Hneed an obj ect"); this._validateObject(obj); this._mongo.update(this._fullName, query, obj, upsert ? true : false, multi ? true : false);
}

要査看shell提供的所有自动生成的JavaScript函数API文档,可访问http://api.mon- godb.org/jso
蹩脚的集合名
使用db.集合名的方式来访问集合一般不会有问题,但如果集合名恰好是数据库类 的一个属性就有问题了。例如,要访问version这个集合,使用db. vers ion就 不行,因为db.version是个数据库函数(它返回正在运行的MongoDB服务器的 版本)。

>db.version
function (){return this.serverBuildlnfo().version;
}

当JavaScript只有在db中找不到指定的属性时,才会将其作为集合返回。当有属性 与目标集合同名时,可以使用getCollection函数:

>db.getCollection("version");
test.version

要査看名称中含有无效JavaScript字符的集合,这个函数也可以派上用场。比如£。。-
bar是个有效的集合名,但是在JavaScript中就变成了变量相减了。通过db.get- Collection ( " f oo-bax")可以得到 f oo-bax 集合。
在JavaScript中,x.y与x[‘y’]完全等价。这就意味着不但可以直“呼”其名,也可 以使用变量来访问子集合。也就是说,当需要对blog的每个子集合执行操作时,只需 要像下面这样迭代就好了:

var collections = ["posts" z "comments**, "authors"];
for (i in collections) (
doStuff(db.blog [collections[i]]);
}

而不是使用下面这种笨笨的写法:

doStuff(db.blog.posts);
doStuff(db.blog.comments);
doStuff(db.blog.authors);

MongoDB——Shell的基本操作及使用窍门相关推荐

  1. python执行shell脚本、执行mongodb_Mongo shell 的基本操作和 Python shell 中使用 MongoDB...

    Mongo shell 的基本操作 MongoDB 分四级存储: 1.数据库 db 2.文档集合 collections(相当于 MySQL 的数据库表) 3.文档 document(相当于 MySQ ...

  2. mongodb shell基础命令

    mongodb shell命令 1.数据库基本操作 在mongodb中,使用use来创建和选择数据库,当数据库不存在时,use会创建一个新的数据库,但是这数据库并没有持久化到硬盘里面,而存在内存中,只 ...

  3. 启动MongoDB shell客户端会什么会一闪而过

    解决办法: 在MongoDB shell客户端根目录下右击选择 "在此处打开命令窗口"; 在命令窗口敲入mongod --dbpath=d:/mongodb/data ; //我的 ...

  4. MongoDB shell 操作

    A:连接命令 E:\MongoDB\mongodb_64\bin>mongo --help MongoDB shell version: 2.4.6 usage: mongo [options] ...

  5. MongoDB Shell和Robo3T使用以及与SQL语法比较

    From:MongoDB Shell 了解使用 - 大葱哥 - 博客园 MongoDB基本管理命令:MongoDB基本管理命令_千与的专栏-CSDN博客_mongo查询命令 MongoDB常用操作命令 ...

  6. MongoDB数据表基本操作

    MongoDB数据表基本操作 查看全部数据表 > use ChatRoom switched to db ChatRoom > show collections Account Chat ...

  7. 【mongodb系统学习之三】进入mongodb shell

    三. 进入mongodb shell(数据库操作界面) : 1).在mongodb的bin目录下输入./mongo,默认连接test数据库,连接成功会显示数据库版本和当前连接的数据库名,如图: 2). ...

  8. MongoDB学习笔记(七)——MongoDB shell方法汇总

    在写前面的博文的时候,我发现MongoDB shell提供了很多方法,其中MongoDB的很多方法也在其中,下面是我从MongoDB官网上查到的所有MongoDB shell的所有方法,当然,我不会对 ...

  9. 孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库...

    孤荷凌寒自学python第五十六天通过compass客户端和mongodb shell 命令来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第二 ...

最新文章

  1. epub格式电子书剖析之三:NCX文件构成
  2. java数据结构之枚举
  3. JVM实战与原理---Class文件结构
  4. java 数字信封_GitHub - zhopen/eos-crypto-java: EOS 公钥加密,私钥解密。基于ECC+AES 实现的双向验证加解密。数字信封的 加解密。...
  5. 编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中
  6. 算法—巧排扑克牌(C语言)
  7. PRML-系列一之1.5.1~1.5.3
  8. toolbox、library 的组织
  9. 美联储FOMC会议前瞻:预计美联储将维持目前的政策不变
  10. bzoj 1694 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草(DP)
  11. Unity3D 视频教程列表,共 91 套!
  12. La3713 Astronauts 2-Sat
  13. Android AppWidget详解,内附详细注释
  14. b 树 mysql联合索引_Mysql之B+树索引实战
  15. align-item 与 align-content 的区别
  16. Roxe:大涨时毅然销毁99% ROC 专注解决跨境汇款难题
  17. 自我实现tcmalloc的项目简化版本
  18. Win7系统下文件或程序无法选择默认打开方式如何解决
  19. 武田在第11届国际霍奇金淋巴瘤研讨会上呈报霍奇金淋巴瘤数据
  20. phpstorm 2019.2

热门文章

  1. 【NLP】情感分析实战:金融市场中的NLP
  2. 【论文解读】让特征感受野更灵活,腾讯优图提出非对称卡通人脸检测,推理速度仅50ms...
  3. 入选《2021爱分析·区域性银行数字化厂商全景报告》,网易云信助力南京银行打造转型标杆
  4. 游戏社交崛起!四缺一,开黑吗?
  5. 云信小课堂|5分钟快速实现iOS端PK连麦场景
  6. 天天鉴宝联手网易智企,开创直播鉴定服务电商平台
  7. 剧本杀,继狼人杀之后的下一个风口
  8. 音视频通话:小议音频处理与压缩技术
  9. 如何快速设计短信验证码
  10. 2018最新版 手机号、验证码正则表达式 jq + 小程序