MongoDB初略了解


写在前面

上一篇中对mongoDB在windows上的安装大致了解并掌握(见  ),这一篇对mongoDB进行一个大致的初略了解。没有涉及到PHP语言,只是纯粹的MongoDB自己的语法。

PHP对应的MongoDB等熟悉原生态语言之后,再了解。

1.启动:

安装好了mongoDB之后,并将其加入自动随开机启动后,就可以对MongoDB进行测试并学习了。打开客户端。开始>>运行>>cmd。切换到MongoDB的安装目录,运行mongo.exe,默认是运行在27017端口,然后是MongoDB/data 下进行数据存储。

[html]
  1. C:\Documents and Settings\Administrator>E:  
  2. E:\>CD MongoDB  
  3. E:\MongoDB>mongo.exe  
  4. MongoDB shell version: 2.0.2  
  5. connecting to: test  
  6. >  
这样就运行了mongodb,就可以在这个客户端下输入语法结构,来进行试验和学习了。

2.关于MongoDB的几个概念

在学习之前我们就知道MongoDB是NoSql数据库,也就是非关系型数据库,那不存在SQL,也就没有表、行和列了。那它是如何存储呢?是文档存储。那么文档就有几个概念了。

文档>>集合>>数据库

一. 文档是MongoDB中最小单位,也是MongoDB的核心,相当于MySQL数据库表中的一条记录(一行),多个键以及其关联的值有序的放置在一起就是一个文档,所以,文档是采用键值对的形式存放的,采用json格式{ “var1”:"value1","var2":"value2",......} 。

下面就是一个文档:

[javascript]
  1. {"name":"yangyi"}  
文档可以是一个键值对,也可以是N个键值对:

[javascript]
  1. {"name" : "yangyi"" sex""男" , "age":" 保密""high" : "182"}  
文档采用json键值对的形式进行存放。但是是有顺序的,顺序不一样,文档就不一样。

[javascript]
  1. {"name" : "yangyi" , "sex" : "男"//文档1   
  2. {"sex""男" , "name" : "yangyi"}  //文档2    
  3. 文档1和文档2顺序不一样,所代表的文档就不一样。  
文档的键是非空的字符串,区分大小写的。“FOO”和“foo”不一样的,值可以是各种字符,如整型,字符串型,浮点型等等。

二.  集合就是一组文档,如果说文档类似于Mysql等关系型数据库中的一行(记录),那么集合就相当于关系型数据库中的表了、

集合是无序的,可以存储任意类型(整型,字符型)的文档,集合的命名是非空的字符串,不能包含“$”,不能用"system"开头。

三. 数据库

     多个文档组成集合,多个集合就组成了数据库。一个MongoDB实例可以承载多个数据库,他们之间可视为完全独立,每个数据库都有独立的权限控制,那么数据库的命名:

  1. 不能是空字符串(“”)
  2. 不能够含有’‘(空格)、. (点) 、$ 、/ 、\ 和 \0(空字符)
  3. 应全部小写
  4. 最多64个字节
  5. admin、local、config都是系统的保留名字,不能作为数据库名。

3.MongoDB的shell

提到shell,,或许并不陌生,这让我想到了linux系统里的shell,就是一组命令编程,通过代码命令,直接在命令提示符下运行,那么在MongoDB中也有shell,它是基于javascript的shell脚本,顾名思义,是可以运行javascript代码的,可以对MongoDB进行系统的管理,检查运行实例,亦或做其他尝试,所以,单纯讲MongoDB,而不与PHP进行连接的话,shell是核心,至关重要。因为对MongoDB数据库的操作都是shell命令。

既然MongoDB是基于javascript的shell脚本的,我们来看看几个javascript代码的运行。

[javascript]
  1. Microsoft Windows XP [版本 5.1.2600]  
  2. (C) 版权所有 1985-2001 Microsoft Corp.  
  3.   
  4. C:\Documents and Settings\Administrator>E:  
  5.   
  6. E:\>CD MongoDB  
  7.   
  8. E:\MongoDB>mongo.exe  
  9. MongoDB shell version: 2.0.2  
  10. connecting to: test  
  11. > x = 100  
  12. 100  
  13. > x /10  
  14. 10  
  15. >  
输入x = 200 ,那么x/10 就会计算出结果为10了。下面看一看javascript里面的函数。

[javascript]
  1. E:\MongoDB>mongo.exe  
  2. MongoDB shell version: 2.0.2  
  3. connecting to: test  
  4.   
  5. > Math.Random();Tue Jan 10 09:20:42 TypeError: Math.Random is not a function (shell):1 //代码会错误提示不是一个函数   
  6. > Math.PI; //javascript里面的PI函数   
  7. 3.141592653589793  
  8. > Math.random();//javascript里面的随机函数   
  9. 0.16819060474183345  
  10. > Math.random();0.8884451417534981  
  11. >  

那么,也可以自定义函数,进行操作,和javascript里面一样。

[javascript]
  1. E:\MongoDB>mongo.exe  
  2. MongoDB shell version: 2.0.2  
  3. connecting to: test  
  4. function fun1 (n) {  
  5. ... if (n <= 1) return 1;  
  6. ... return n * fun1(n-1);  
  7. ... }  
  8. > fun1(5);  
  9. 120  
  10. >  
自定义函数fun1(),用来不断判断循环,最终计算出结果120。

所以,在MongoDB中对javascript有着非常好的支持。

4.MongoDB的shell对数据库的基本操作

   既然MongoDB中的shell脚本如此强大,那么就像是MySQL在命令提示符下,也可以进行对数据库的增删改查操作,MongoDB也不例外。

1 . 创建

在MongoDB中插入一个文档到集合中,也就是插入一行记录到表中是一样的道理。首先是选择数据库,在选择一个集合,最后将一个文档插入

[javascript]
  1. E:\MongoDB>mongo.exe  
  2. MongoDB shell version: 2.0.2  
  3. connecting to: test  
  4. > use php  //use 库名 ,use用来选择数据库,如果这个php数据库不存在,就创建一个名为php的数据库。   
  5. switched to db php //提示信息   
  6. > post = {  //编写一个名为post的文档。   
  7. ... "title":"wowowowo",  
  8. ... "content":"hahahahah",  
  9. ... "time"new Date()}  
  10. {  
  11.         "title" : "wowowowo",  
  12.         "content" : "hahahahah",  
  13.         "time" : ISODate("2012-01-10T03:38:45.515Z")  
  14. }  
  15. >db.blog.insert(post); //像php库中的blog集合中插入post文档。如果blog集合不存在,就自动创建一个新的集合,并将post文档加入到这个集合中去。  
或许有点不好理解,特别是选择了php数据库后,貌似没有选择集合(mysql中的表),就直接插入了。

在MongoDB中,use database 来选择数据库,当不存在时,就自动创建一个数据库。

                             db.blog.insert( 文档);来插入一个文档,当然也可以直接插进去,不用post这种形式。

                             db.blog.find();查找集合里面的全部文档数据;

                             db.blog.find0ne();查找最近的一个文档。

                             db.blog.update({条件},内容);更新文档。

                             db.blog.remove();删除文档。

所以很重要的思想是:先use(选择)库,在选择集合进行的操作,选择集合和对应的操作是一起的。

[javascript]

  1. E:\MongoDB>mongo.exe  
  2. MongoDB shell version: 2.0.2  
  3. connecting to: test  
  4. > use php  //第一步:选择php数据库   
  5. switched to db php  
  6. > post = { //第二步:建一个post文档   
  7. ... "title":"wowowowo",  
  8. ... "content":"hahahahah",  
  9. ... "time"new Date()}  
  10. {  
  11.         "title" : "wowowowo",  
  12.         "content" : "hahahahah",  
  13.         "time" : ISODate("2012-01-10T03:38:45.515Z")  
  14. }  
  15. > db.blog.insert(post); //第三步:选择blog集合(没有就在php库中创建),第四步:插入post文档   
  16. > db.blog.find();  //第五步:查询所有的文档记录   
  17. "_id" : ObjectId("4f0ba2c1b4787b891f51fb9b"), "title" : "yangyi123""content"  
  18.  : "hahahahahah""time" : "2011-12-23" }  
  19. "_id" : ObjectId("4f0bb3375a5904bae2b767a6"), "title" : "wowowowo""content"  
  20. "hahahahah""time" : ISODate("2012-01-10T03:38:45.515Z") }  
  21. > db.blog.findOne(); //第六步:查找最近的一个文档,注意:find0ne()中,0是大写字母。   
  22. {  
  23.         "_id" : ObjectId("4f0ba2c1b4787b891f51fb9b"),  
  24.         "title" : "yangyi123",  
  25.         "content" : "hahahahahah",  
  26.         "time" : "2011-12-23"  
  27. }  
  28. > db.blog.find({"title":"yangyi123"}) //第七步:查询,键title为"yangyi123"的文档。   
  29. "_id" : ObjectId("4f0ba2c1b4787b891f51fb9b"), "title" : "yangyi123""content"  
  30.  : "hahahahahah""time" : "2011-12-23" }  
  31.   
  32. > post.comments = "hao a hao a "//post文档添加一个comments键,值为“hao a hao a ”   
  33. hao a hao a  
  34. > db.blog.update({"title":"wowowowo"},post) //第八步:更新,将title为“wowowo”的文档添加comments键。   
  35.   
  36. > db.blog.find(); //再重新查看,增加了comments键。   
  37. "_id" : ObjectId("4f0bc1245a5904bae2b767a8"), "title" : "wowowowo""content"  
  38. "hahahahah""time" : ISODate("2012-01-10T03:38:45.515Z") }  
  39. "_id" : ObjectId("4f0bc11d5a5904bae2b767a7"), "title" : "wowowowo""content"  
  40. "hahahahah""time" : ISODate("2012-01-10T03:38:45.515Z"), "comments" : "hao a  
  41.  hao a " }  
  42. >  
  43. > db.blog.remove({"title":"yangyi123"}) //第九步:删除键title为"yangyi123"的文档。   
  44. > db.blog.remove() //第十步:删除所有的文档   
  45. > db.blog.findOne()  
  46. null  
  47. >  

相关内容