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
  • 相关阅读:
    【Educational Codeforces Round 101 (Rated for Div. 2) C】Building a Fence
    【Codeforces Round #698 (Div. 2) C】Nezzar and Symmetric Array
    【Codeforces Round #696 (Div. 2) D】Cleaning
    【Codeforces Round #696 (Div. 2) C】Array Destruction
    【Educational Codeforces Round 102 D】Program
    【Educational Codeforces Round 102 C】No More Inversions
    【Good Bye 2020 G】Song of the Sirens
    【Good Bye 2020 F】Euclid's nightmare
    使用mobx入门
    requestAnimationFrame 控制速度模拟setinterval
  • 原文地址:https://www.cnblogs.com/Stay-J/p/10806310.html
Copyright © 2011-2022 走看看