MongoDB 基础知识二

MongoDB客户端

下面我们进入MongoDB的shell 进行一些实际操作

1.首先打开MongoDB的服务

2.打开shell工具

3.选择数据库 (默认是使用test数据库)

> use foobar

switched to db foobar

如何要查看当前的数据库名字可以使用

>db

foobar

foobar就是当前所使用的数据库

shell 中的基本操作

1.创建

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

> post={"title" : "My Blog Post" , "content" : "Here's My blog post." ,"data" :
new Date()}
{
"title" : "My Blog Post",
"content" : "Here's My blog post.",
"data" : ISODate("2014-03-21T14:48:40.221Z")
}

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

> db.blog.insert(post)

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

> db.blog.find()
{ "_id" : ObjectId("532c5211753513899b597e09"), "title" : "My Blog Post", "conte
nt" : "Here's My blog post.", "data" : ISODate("2014-03-21T14:48:40.221Z") }

2.读取

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

> db.blog.findOne()
{
"_id" : ObjectId("532c5211753513899b597e09"),
"title" : "My Blog Post",
"content" : "Here's My blog post.",
"data" : ISODate("2014-03-21T14:48:40.221Z")
}

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

3 更新

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

第一步修改变量post,增加“comments"键:

> post.comments=[]
[ ]

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

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

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

> db.blog.find()
{ "_id" : ObjectId("532c5211753513899b597e09"), "title" : "My Blog Post", "conte
nt" : "Here's My blog post.", "data" : ISODate("2014-03-21T14:48:40.221Z"), "com
ments" : [ ] }

4.删除

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

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

集合现在又是空的了。

使用shell的窍门

由于mongo是个Javascript shell,通过在线查看Javascript的文档能获得更多帮助。shell本事内置了帮助文档,可以通过help命令查看

> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce

...

使用db.help() 可以查看数据库级别的命令的帮助,集合的相关班组可以通过db.foo.help()来查看。

有过了解函数功能的技巧,就是在输入的时候不要输括号。这有就会显示该函数的Javascript源代码。例如,想看看 update的机理,活受罪是为了看看那参数顺序,可以这么做:

> db.foo.update
function ( query , obj , upsert , multi ){
assert( query , "need a query" );
assert( obj , "need an object" );

var firstKey = null;
for (var k in obj) { firstKey = k; break; }

if (firstKey != null && firstKey[0] == '$') {
// for mods we only validate partially, for example keys may have dots
this._validateObject( obj );
} else {
// we're basically inserting a brand new object, do full validation
this._validateForStorage( obj );
}

// can pass options via object for improved readability
if ( typeof(upsert) === 'object' ) {
assert( multi === undefined, "Fourth argument must be empty when specify
ing upsert and multi with an object." );

opts = upsert;
multi = opts.multi;
upsert = opts.upsert;
}

var startTime = (typeof(_verboseShell) === 'undefined' ||
!_verboseShell) ? 0 : new Date().getTime();
this._mongo.update( this._fullName , query , obj , upsert ? true : false , m
ulti ? true : false );
this._printExtraInfo("Updated", startTime);
}

要查看shell提供所有自动生成的Javascript函数API文档,可以访问http://api.mongodb.org/js

蹩脚的集合名

使用db.集合名的方式来访问集合一般不会有问题,但如果集合名恰好是数据库类的一个属性就有问题了。例如,要访问version这个集合,使用db.version就不行,因为db.version是个数据库函数(返回mongodb服务器版本)

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

但Javascript只有在DB中找不到指定的属性石,才会将其作为集合返回。当属性与目标集合同名时,可以使用一个叫做getCollection的函数:

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

 

 要查看名称中含有无效Javascript字符的集合,这个函数也可以派上用场,比如foo-bar 是个有效的集合名,但是在JavaScript中就变成了变量相减了。通过db.getCollection("foo-bax")可以得到foo-bax集合

在JavaScript中,x.y与x['y']完全等价。这就意味着不但可以自呼其名,也可以使用变量来访问子集合。也就是说,当需要对blog的每个子集合执行操作时,只需要像下面这有迭代就好了:

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

ps:doStuff非Mongodb的内置函数 只是一个大致的说明 告诉你这里面做了一些操作而已 再shell里面运行会提示错误的 因为你没有这个function

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

doStuff(db.blog.posts);

doStuff(db.blog.comments);

doStuff(db.blog.authors);

 2014-03-22 00:02:38

posted @ 2014-03-22 00:01  ElvinLong  阅读(275)  评论(0编辑  收藏  举报