您的位置:首页 > 数据库 > Mongodb

学习MongoDB--(2-2):MongoDB入门(Shell基本操作)

2012-08-02 20:38 686 查看
MongoDB自带一个JavaScript Shell。可以通过这个Shell与启动的MongoDB实例进行交互,进行交互的语言就是JavaScript (

对于接触过Web前台开发的童鞋,这个真是一个惊喜啊!)。在Windows下先启动MongoDB服务,然后运行mongo命令即可打开Shell:



Shell启动默认会连接到MongoDB的test数据库。你可以对这个数据库中的集合和文档进行操作。刚才说了MongoDB Shell是一个完备的JavaScript解释器,可以运行任何JavaScript程序,我们就写几个实验一下吧,顺便回忆一下JavaScript的基本语法了:



在Shell中,每当你写完一句完整的JavaScript代码,Shell就会将其结果返回。从中我们还可以定义函数,在定义函数时,Shell检测函数没有定义完,换行时,会提示让你继续输入。定义好函数后,我们可以直接调用。

Shell除了是一个很酷的JavaScript解释器外,其存在的真正目的是一个MondoDB的客户端。启动Shell,其默认连接到test数据库,并将这个数据库连接赋值给全局变量db。这个变量使我们通过Shell访问MongoDB的主要入口点。

Shell同时提供了一些非JavaScript的操作,最常用的是选择使用的数据库:



使用use 数据库名就可以切换全局变量db当前指向的数据库。注意:use操作同时可以创建数据库,如果use+一个不存在的数据库名,则use执行后,MongoDB会创建对应数据库。现在看看在Shell中对数据库执行CRUD操作。

【C:创建】

利用insert命令可以往一个集合中插入文档。看下面的图,我先通过use命令创建并将db指向了mylearndb, 然后通过insert 向 mylearndb.blog集合中插入文档,该集合第一次使用会被创建:插入后,可通过集合的find命令来查询显示:



集合的find命令默认查询并返回集合中所有的文档,Shell会自动展示20个,我们再插入一个文档并查询出来:



从上图可以看出,我们定义的文档并没有“_id” 这个键,但插入到集合后,系统会自动添加这个键,并生成一个集合内唯一的值。

【R:读取】

上述集合的find就是一个读取命令,如果只想查询出一条,可以通过集合的findOne命令。find和findOne均可以接受查询文档形式的限定条件。看如下例子:



第一次调用findOne,我们没有加查询条件,得到集合中第一条数据,第二次查询,我们传递了一个文档类型的参数,并指明了键“title”的值,我们就查询到了这个键对应这个值的文档了。

【U:更新】

如果要更改文档,我们要用到update命令,该命令接受(至少)两个参数,第一个是要更新的文档的限定条件,第二个是新的文档。通常我们的做法是,先通过find或findOne命令得到对应的文档,然后进行更新,最后通过update命令将新的文档更新到集合中,图示:



图示我们先获得第一次插入的博客文档,然后向其中添加了一个新的键,值为数组类型,存放评论。然后将这个文档更新到数据库中。

【D:删除】

集合的remove方法用于永久性删除一个集合中的文档,默认不接受参数的情况下,他会删除集合中所有文档,也可以接受一个参数删除特定的文档:



这段操作,首先查询所有文档,然后通过集合的remove操作删除一条,最后调用集合的find命令确认文档永久删除。

Shell使用也有一些技巧,在Shell中运行help可以得到一些函数的帮助介绍。运行db.help() 可以得到所有数据库支持的函数。运行db.mylearndb.help() 可以得到所有集合支持的函数。

在Shell中如果想查看函数的源码也十分方便,在函数名称后面别添加“()”即可,如db.help()是调用数据库的help函数。但如果直接执行db.help就是查看数据库的help函数源码了。

通常来说,db.集合名,就可以得到对应的集合。但如果该名称是数据库对象的一个属性,这样做就没法返回这个集合了。如db.version ,其会返回当前正在运行的MongDB服务的版本号。如果你有一个verison的集合,这样你无法得到这个集合对象。这是你可以通过数据库的getCollection函数即db.getCollection("version")得到这个集合对象。如果集合名称中有一些无效的JavaScript字符,要得到这个集合,也需要通过getCollection函数。如foo-bar这个集合名称,直接写db.foo-bar,Shell会执行失败,因为“-”会被当成减法运算符处理。要获得这个集合,我们必须这样做db.getCollection("foo-bar"),如图:



另外,再提一点,JavaScript中,x.y 和 x['y']完全等价,上一篇中我们提过子集合的表示,是通过“.“连接的,因此我们也可以通过后者这种方式对来引用子集合:

// 通过数组放置所有子集合的名称
var collections = ["posts", "comments", "authors"];
for(i in collections){

// 对子集合执行doStuff函数
doStuff(db.blog[collections[i]]);
}

这样我们可以通过循环的方式来操作一组集合,而不必逐个调用,对于大量集合的情况,我们通过某个方法得到所有集合的数组,然后一个for就可以,而不用这样操作:

doStuff(db.blog.posts);
doStuff(db.blog.comments);
doStuff(db.blog.authors);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: