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