mongodb概念--文档、集合、数据库、shell

来源:互联网 发布:mac如何解压缩rar 编辑:程序博客网 时间:2024/06/08 08:27

Mongodb不是关系型数据库,对于使用关系型数据库较多的我们,mongodb的一些基本概念需要好好的理解。在理解这些概念的时候,我是以与关系型数据库等对比的方式来理解的,这样有助对概念的更好理解。

1.文档
  文档时mongodb中数据的基本单元,类似关系型数据库中的行。
  >>关系型数据库:
    行:是标识一条存在数据库中的记录,行有唯一标识的字段,比如oracle就有隐藏存在的rowid。行有列,标识对应字段的名称,字段值为列所表示的值。
  >>Mongodb
    文档:标识集合中的一条记录,即集合中的一个对象,形象的对比:数组中的一个元素,List中的一个元素等(个人理解)。文档有唯一的标识“_id”,数据库可自动生成,可类比oracle的rowid。
          文档以key/value的方式,如下文档:
          {"name":"jack","age":20}
          可类比数据表的列,以及列对应的值。
         
          以下列出键值为不同类型的不同文档:
          文档1:{"name":"wangjun","age":20,"email":["wang1","wang2","wang3"],"schools":{"xiao":"zhongfengxiaoxue","zhong":"zhongfengzhongxue","da":"zhongfengdaxue"}}
          文档2:{"Name":"wangjun","Age":20,"email":["wang1","wang2","wang3"],"schools":{"xiao":"zhongfengxiaoxue","zhong":"zhongfengzhongxue","da":"zhongfengdaxue"}}
          文档3:{"name":"wangjun","email":["wang1","wang2","wang3"],"age":20,"schools":{"xiao":"zhongfengxiaoxue","zhong":"zhongfengzhongxue","da":"zhongfengdaxue"}}
         
          三个不同文档说明以下问题:
          1> 文档的键值对是有序的,顺序的不同文档亦不同
          2> 文档的值可以使字符串、整数、数组以及文档等类型
          3> 文档的键是用双引号标识的字符串(常见的);除个别例外外,可用任务UTF-8字符。要求如下:
             >键不能含有\0(空字符),这个字符用来标识键的结尾
             >.和$被保留,存在特别含义,最好不要用来命名键名
             >"_"开头的键是保留的,建议不要使用。
         
          4> 文档区分大小写以及值类型,比如:
             {"name":"wangjun","age":20}
             {"name":"wangjun","age":"20"}
            
             {"Name":"wangjun","Age":20}
             {"name":"wangjun","age":"20"}
            
             以上这些通过比较着来看,我觉得就都很好理解。
            
2.集合
  集合在mongodb中是一组文档,类似关系型数据库中的数据表。
  >>关系型数据库:
    表:是存储多个数据的,表中存在多行。表,即模式.表名。表中的数据行在列数、列的类型都是一样。
    select * from [模式].表名
  >>Mongodb
    mongodb数据库不是关系型数据库,没有模式的概念。集合中的文档可以使不同形式的。比如:
    {"name":"jack","age":19}
    {"name":"wangjun","age":22,"sex":"1"}
   
    可以存在同一个集合当中。
   
    集合是由唯一的命名来标识,满足以下条件的任意UTF-8字符串:
    >集合名不能使空字符串""
    >集合名不能含有\0字符(空字符),这个字符标识集合名的结尾
    >集合名不能以"system."开头,该为系统集合保留的前缀
    >用户创建的集合名字不能含有保留字符$
   
    比如:集合classes   classes的子集合students  查询方式:
    db.classes.find()
    db.classes.students.find()
   
    跟关系型数据库的数据表、组数、列表对比看,我觉得mongodb的集合更像列表List。
   
3.数据库
  mongodb中多个文档构成集合,多个集合构成数据库。
  >>关系型数据库
    在安装数据库的时候数据库实例创建,同时存在系统默认的管理员用户。之后可以创建多个用户并进行赋权,创建的表存在于不同的用户之下,不同的用户存储着不同的数据。
  >>Mongodb
    mongodb以文档的形式保存在集合中,可以同一数据库存储不同的数据或者集合,即DB2、oracle、teradata等都可以存储在同一个数据库中。最近做的项目就可以将这三者数据库的数据都保存到同一数据库中。
   
    mongodb服务器可以存在多应用或者用户的数据,可以相互独立。数据的命名规则:
    >不能使空字符串("")
    >不得含有''(空格)、.、$、/、|和\0(空字符)
    >应全部小写
    >最多64字节
   
    保留数据库名:admin、local、config
   
4.Mongodb Shell
  Mongodb Shell即自带的javascript shell,javascript解释器.运行mongo启动shell后自动连接Mongodb服务器,运行javascript程序。可以再shell窗口里面进行javascript函数的一些操作。
  如:
  >1+1
  2
  >val = 10
  10
  >val/2
  5
  >
 
  shell也是Mongodb客户端,shell连接Mongodb服务器的test数据库,并将该数据库的连接赋值给全局变量db,即shell访问mongodb数据库的主要入口点。
  shell操作:
  1.创建:db.a.insert({"name":"jack","age":19})
          db.a.insert({"name":"luce","age":20})
         
  2.查找:db.a.find()                  --全查
          db.a.findOne()               --只取多个的第一个
          db.a.find({"name":"jack"})   --根据条件查找
         
  3.更新:db.a.update({"name":"jack"},{"age":30})
 
  4.删除:db.a.remove()                --删除所有文档,集合保留
          db.a.remove({"name":"jack"}) --删除复合条件的文档
          db.a.drop()                  --删除集合,于此同时所有文档也删除了
  
   从上面可以看出,shell中使用的为javascript脚本,具体的使用类比jquery中方法的调用方式,面向对象???
  

以上是我参考一些资料和实际的工作和学习的理解,有什么问题请指出,谢谢!

         

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人又傻又蠢怎么办 微信不能收红包怎么办 gta5有任务没做怎么办 害怕死亡怎么办才16岁 被罩四个角的绳怎么办 电脑进水花屏了怎么办 法院判了不执行怎么办 优酷安装不上怎么办 保温杯磕了个坑怎么办 韩国旅游签证5年怎么办 新娘裙太长怎么办请茶 花无缺逾期20天怎么办 酷云密码忘了怎么办 我的声音不好听怎么办 耳朵后面长了个硬包怎么办 汽车油表不动了怎么办 油位传感器坏了怎么办 孕妇牙疼耳朵疼怎么办 耳机戴的耳朵疼怎么办 擤鼻涕左耳朵疼怎么办 擤完鼻涕耳朵疼怎么办 五岁儿童耳朵疼怎么办 耳朵里面长了个硬包怎么办 耳朵里有耳屎响怎么办 耳屎粘在耳膜上怎么办 小孩脖子上有淋巴结怎么办 大腿内侧的筋疼怎么办 大腿内侧磨的疼怎么办 孕晚期大腿根疼怎么办 吞口水耳朵会响怎么办 耳朵里面老痒该怎么办 牙疼头疼耳朵疼怎么办 耳朵里流水还疼怎么办 单侧耳朵里面疼怎么办 打到睾丸很疼怎么办 大拇手指关节疼怎么办 早上醒来耳朵嗡嗡响怎么办 两个月宝宝起湿疹怎么办 运动时耳朵闷堵怎么办 刚打的耳洞红肿怎么办 耳洞好了又肿了怎么办