zoukankan      html  css  js  c++  java
  • Mongodb基本知识

    Mongodb数据库,集合,文档

    文档:

    文档是Mongodb中的核心概念。文档就是键值对的有序集合。类似于ruby中的hash,python中的dict或是javascript中的对象。

    可以只有一个键值对,也可以设置对个键值对。

    • 文档中的值可以是多种不同的数据类型(甚至是一个内嵌的文档),"greeting"的值是一个字符串,"foo"的值是一个整数
    • 键区分大小写
    • 文档的键是字符串,除了少数情况下,键可以使用任意的UTF8字符
      • 键不能含有(空字符)。这个字符用于表示键的结尾
      • .和$具有特殊意义,通常这两个字符被保留
      • 一个文档中不能有重复的键
    "greeting": "Hello, World"}
    
    {"greeting": "Hello, World", "foo": 3}

    文档中的键/值是有序的 {"x": 1, "y": 2}与{"y": 2, "x": 1} 是不同的。在某些特殊情况下,字段顺序变得非常重要。

    集合

    简单的来说:集合就是一组文档,如果将Mongodb中的一个文档比喻为关系型数据库中的一行,那么一个集合就相当于一张表

    集合命名

      集合使用名称进行表示。集合名可以是满足下列条件的任意UTF8字符串

    • 集合名不能是空字符串("")
    • 集合名不能包含字符(空字符),这个字符表示集合名的结束
    • 集合名不能以"system"开头,这是为系统集合保留的前缀,例如, system.users这个集合保存着数据库的用户信息,而system.namespace集合保存着所有数据库的集合信息
    • 用户穿件的集合不能再集合名中保留字符“$”。因为某些系统生成的集合中包含$,很多驱动程序确实支持在集合名中包含该字符,除非你要访问这种系统创建的集合,否则不应该在集合名中包含$

    数据库

    在Mongodb中,多个文档组成集合,而多个集合可以组成数据库。每个数据库拥有0个或者多个集合,每个数据库都有独立的权限,即便是在磁盘上,不同的数据库也防止在不同的文件中。按照经验我们把一个应用程序的所有数据都存储在一个数据库中。要想在MongoDB服务器上存放多个应用程序或者用户程序就需要使用不同的数据库。

    有一些数据库是保留的admin

    • 从身份验证的角度来讲,这是“root”数据库。如果将一个用户添加到admin数据库,这个用户将自动获得所有数据库的权限。再者,一些特定的服务端命令也只能从admin数据库运行,例如列出所有数据库或者关闭服务器
    • local
      这个数据库永远都不能复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。
    • config
      MongoDB用于分片设置时,分片信息会存储在config数据库中

    把数据库名添加到集合名前,得到集合的完全限定名,即命名空间。如果要使用cms数据库中的blog.post集合那么这个集合的命名空间就是cms.blog.post。命名空间的长度不能超过121字节,且在实际使用中应小于100字符。

    MongoDB shell

    mongo 命令进入mongodb shell 在此shell 中可以执行 JavaScript代码

    MongoDB 数据类型

    MongoDB基本数据类型

    • null
      null 用于表示空值或者不存在的字段:
       {"x": null} 

    • 布尔型
      布尔类型有两个值true和false
       {"x": true} 

    • 数值
      shell默认使用64位浮点型数值,因此以下数值在shell中是很“正常的”:
       {"x": 3.14} 或 {"x": 3} 或{"x": NumberInt("3")} // 4字节带符号整数 {"x": NumberLong("3")} // 8字节带符号整数 
    • 字符串
      UTF8字符串都可以表示为字符创类型的数据
       {"x": "foobar"} 


    • 日期
      日期被存储为自新纪元雨来经过的毫秒数,不储存时区:
       {"x": new Date()} 

    • 正则表达式
      查询时,使用正则表达式作为限定条件,语法也和JavaScript的正则表达式语法相同:
       {"x": /foobar/i} 

    • 数组
      数据列表或数据集可以表示为数组:
       {"x": ["a", "b", "c"]} 

    • 内嵌文档
      文档可嵌套其他文档,被嵌套的文档作为父文档的值:

       {"x": {"foo": "bar"}} 

    • 对象ID
      对象ID是一个12字节的ID,是文档唯一标识:
       {"x": ObjectId()} 

    还有些不那么常用但是有可能用得到的类型:

    • 二进制数据
      二进制数据是任意字节的字符串,他不能直接带shell中使用

    • 代码
      查询和文档中可以包括任意的JavaScript代码:
       {"x": function() {/*....*/}} 

    MongoDB shell 

    shell 可以连接到本地的mongod实例,而且可以通过该shell连接到任何MongoDB实例

    $ mongo some-host:30000/myDB
    MongoDB shell version: 2.4.0
    connecting to: some-host:30000/myDB
    >

    现在我们就连接到了some-host:30000上的myDB数据库.

    也可以通过--nodb 不连接任何数据库进入shell

    $ » mongo --nodb                                                                                                                            apple@apple-Pro
    MongoDB shell version v4.0.3
    >

    启动后可以在需要时运行new Mongo命令就可以连接MongoDB

    ~/Documents/demo/go_demo » mongo --nodb                                                                                                                              apple@apple-Pro
    MongoDB shell version v4.0.3
    > conn = new Mongo("some-host:30000")
    > db = conn.getDB("myDb")
    myDb
  • 相关阅读:
    vue nextTick使用
    Vue slot插槽内容分发
    vue 项目设置实现通过本地手机访问
    vue router mode模式在webpack 打包上线问题
    html设置 hight100%问题
    更新模块通知栏显看不到当前进度,以及更新下载中可以清理通知问题,华为强制更新退出软件后台下载不显示通知问题
    ScrollView下嵌套GridView或ListView默认不在顶部的解决方法
    文件说明注释
    EditText双光标问题
    原 android重启应用(应用重新启动自身)
  • 原文地址:https://www.cnblogs.com/Stay-J/p/10806310.html
Copyright © 2011-2022 走看看