先搞清楚集合,文档,数据库的关系。
不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍。
文档:
文档是mongodb中的最核心的概念,是其核心单元,我们可以将文档类比成关系型数据库中的每一行数据。多个键及其关联的值有序的放置在一起就是文档。在mongodb中使用一种类json的bson存储数据。bson数据可以理解为在json的基础上添加了一些json中没有的数据类型。如果我们会json,那么bson我们就已经掌握了一半了,至于新添加的数据类型后面我会介绍。文档例子如下:
1. {“name":"mengxiangyue","sex":"nan"}
对于文档是有一些限制的:有序、区分大小写的,所以下面的两个文档是与上面不同的
1. {”sex“:"nan","name":"mengxiangyue"}
2. {"Name":"mengxiangyue","sex":"nan"}
集合:
集合就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。
在mongodb中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的,比如下面的两个文档可以同时存入到一个集合中:
1. {"name":"mengxiangyue"}
2. {"Name":"mengxiangyue","sex":"nan"}
这个是与关系型数据库不同,在关系型数据中所有的行的字段都是相同的。不能像mongodb中这样可以不相同。虽然mongodb的集合是无模式的,但是mongodb的官方还是建议所有的文档的结构都是相同的,这样处理起来比较方便。
数据库:
在mongodb中的数据库的概念与关系型的数据库中的数据库的概念基本相同。在mongodb中的数据库是多个集合的组合。同样一个mongodb中可以建立多个数据库,这些数据库也是相互独立的,也可以独立进行用户验证。
在给数据库起名的时候有几个是保留的admin、local、config。这几个数据库是mongodb的保留数据库。
admin数据库,是一个root数据库,在这个数据库中添加用户,该用户将继承所有的数据库的权限,以后讲权限的时候会用到。
local数据库,这个数据库不会被复制,只存储本地服务器才能访问的数据库。以后再分片的时候会降到。
config数据库用于保存分片的相关信息。
可能有些地方写的也不对,只能通过查资料尽量写的正确,如果哪里错了,还请大虾指出。
”
基本操作
敲入help命令:
show dbs show database names #显示当前总共有哪些数据库
show collections show collections in current database #显示当前数据库的所有集合
show users show users in current database #显示用户
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names #现实所有的log文档
show log [name] prints out the last segment of log in memory, 'global' is default#显示名字为name的log文档的信息
use <db_name> set current database #使用db_name此数据库
db.foo.find() list objects in collection foo #显示数据库.集合....下所有文档
db.foo.find( { a : 1 } ) list objects in foo where a == 1 #显示数据库.集合....下所有符合条件的a=1的文档
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell #退出
遇到的问题:
1.Sat Jul 27 10:43:29 SyntaxError: missing ; before statement (shell):1
语法错误,有可能是忘记了函数的方法要加()也有可能是忘记了加 “,”等等
2.> foo.insert(test)
Sat Jul 27 10:23:28 ReferenceError: foo is not defined (shell):1
foo是我定义的数据库名字,所以不能直接使用数据库执行insert()方法,只有集合才执行更删改查文档的方法。
3.> foo['bar'].insert({'name': 'hhx'})
Sat Jul 27 11:11:34 ReferenceError: foo is not defined (shell):1
当前处于foo数据库中(命令db),使用数据库名字的地方都用db统一代替,所以正确的使用方法是db['bar'].insert({'name': 'hhx'})