zoukankan      html  css  js  c++  java
  • mongodb概念文档、集合、数据库、shell(转并学习) 简单

    <?php
    /*
    mongodb概念--文档、集合、数据库、shell(转并学习)
    
    
    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})
      ================================================
      ================================================
      update执行失败,提示如下:
      SyntaxError: missing: after property id (shell):1
      直接写成sql的样子也不行,这里是不是没加$set呢
      ================================================
      ================================================
      
      4.删除:db.a.remove()                --删除所有文档,集合保留
              db.a.remove({"name":"jack"}) --删除复合条件的文档
              db.a.drop()                  --删除集合,于此同时所有文档也删除了
       
    
    */
    ?>
    

      

  • 相关阅读:
    【microstation CE二次开发】不打开microstation,以COM方式启动Microstation
    【microstation CE二次开发】环境搭建
    Node安装与卸载命令汇总
    Maven进行clean时报错,解决方法
    Django 报ckeditor/skins/moono/skin.js 404
    Handler dispatch failed; nested exception is java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResultSet.isClosed()Z is abstract
    精准测试系列分享之一:JaCoCo 企业级应用的优缺点分析
    Java 中常见的细粒度锁实现
    JVM 的运行时数据区域分布
    Java 细粒度锁续篇
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2820048.html
Copyright © 2011-2022 走看看