zoukankan      html  css  js  c++  java
  • MongoDB学习笔记(1):MongoDB简介

     1. MongoDB的特点:

      (1) 易于使用

        MongoDB是一个面向文档的数据库,非关系型数据库。通过在文档中嵌入式文档和数据,面向对象的方法能够仅使用一条记录来表现复杂的层次关系。文档的键和值不再是固定的类型和大小。

      (2) 易于扩展

        MongoDB的设计采用横向扩展,即通过分区将数据分散到更多机器上。面向文档的数据模型使它很容易地在多台服务器之间进行数据分割。MongoDB能够自动处理集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。

      (3) 丰富的功能

        1) 索引

        MongoDB支持通用二级索引,允许多种快速查询,且提供唯一索引、复合索引、地理空间索引及全文索引

        2) 聚合

        MongoDB支持聚合管道,用户能够通过简单的片段创建复杂的聚合,并通过数据库自动优化。

        3) 特殊的集合类型

        MongoDB支持存在时间有限的集合,适用于将在某个时刻过期的数据,如会话(session),也支持固定大小的集合,用于保存近期数据,如日志

        4) 文件存储

        MongoDB支持非常易用的协议,用于存储大文件和文件元数据

      2. MongoDB基础知识

      (1) 文档

        文档是MongoDB的核心概念,文档就是键值对的一个有序集。文档的键不能含有(空字符),且"."和"$"符只能在特定环境下使用,二者是保留的。MongoDB不但区分类型,而且区分大小写不能包含重复的键,且文档中的键/值对是有序的:{"x":1,"y":2}与{"y":2,"x":1}是不同的。

      (2) 集合

        集合就是一组文档。文档可看做关系型数据库的一行,集合就相当于一张表。

        1) 动态模式

        集合是动态模式的,即{"greeting":"Hello, world!"} {"foo":3}可以存在于同一个集合中.

        2) 命名

        集合中不能是空字符串("");集合中不能包含字符(空字符)集合不能以"syste,."开头,其为系统集合保留的前缀(如system.users保存数据库的用户信息,而system.namespaces集合保存着所有数据库集合的信息);用户创建的集合不能在集合名中包含保留字符"$"

        子集合是使用"."分隔不同命名空间的子集合,使用子集合来组织数据非常高效。

      (3) 数据库

        1) 数据库名需满足:不能是空字符串("");基本上,只能使用ASCII中的字母和数字;数据库名区分大小写;数据库名最多为64字节

        2) 保留的数据库名:

        admin:root数据库,拥有所有数据库的权限,一些特定的服务器端命令也只能从admin数据库运行(列出所有数据库或关闭服务器)

        local:永远不可复制,且一台服务器上的所有本地集合都可以存储在这个数据库中。

        config:用于分片设置

      (4) 启动MongoDB

      运行mongod命令,启动数据库服务器。注意:mongod在没有参数时会使用默认数据目录/data/db,因此,在启动之前,先创建数据目录/data/db,确保对该目录有写权限。

      启动时,服务器会打印版本和系统信息,默认监听27017端口。mongod还会启动一个基本的HTTP服务器,监听数字为28017,通过http://localhost:28017可以获取数据库的管理信息。

    3. windows安装MongoDB,可参考:windows下安装MongoDB及使用整理

    4. Shell基本操作

      MongoDB自带shell,shell是一个功能完备的JavaScript解释器,可运行任意JavaScript程序。

    #简单数学运算
    > x=200    
    200
    > x/5
    40
    
    # 利用JS标准库
    > Math.sin(Math.PI/2)
    1
    > new Date("2016/01/20")
    ISODate("2016-01-19T16:00:00Z")
    > "Hello,World".replace("World","MongoDB")
    Hello,MongoDB
    
    #定义调用JS函数
    > function factorial (n){
    ... if(n<=1) return 1;
    ... return n*factorial(n-1);
    ... }
    > factorial(5)
    120
    >

      注意:在某行连续三次按下回车键可取消未输入完成的命令

      (1) 启动时,shell(MongoDB客户端)会连接到MongoDB服务器的test数据库,并将数据库连接赋值给全局变量db(该变量是通过shell访问MongoDB的主要入口点)。

    #查看db当前指向那个数据库
    > db
    test
    >
    
    #选择数据库
    > use foobar
    switched to db foobar
    > db
    foobar
    >

      通过db变量,可访问其中的集合,如db.baz可返回当前数据库的baz集合。

      (2) 创建

      insert函数可将一个文档添加到集合中。例:创建一个post局部变量来存储博客文章,用于表示我们的文档,其键为"title","content","date"。

    # 定义局部变量post
    > post={"title":"My Blog Post",
    ... "content":"Here's my blog post.",
    ... "date":new Date()}
    {
            "title" : "My Blog Post",
            "content" : "Here's my blog post.",
            "date" : ISODate("2016-01-20T13:29:51.882Z")
    }
    
    # 调用insert将其保存到blog集合中
    > db.blog.insert(post)
    WriteResult({ "nInserted" : 1 })
    
    #查看保存的数据
    > db.blog.find()
    { "_id" : ObjectId("569f8c0c0124e675dc0e4f0f"), "title" : "My Blog Post", "conte
    nt" : "Here's my blog post.", "date" : ISODate("2016-01-20T13:29:51.882Z") }
    >

      (3) 读取

      find和findOne方法可用于查询集合里的文档,若只想查看一个文档,可用于findOne。二者可接受一个查询文档作为限定条件,使用find时,shell最多显示20个匹配的文档

    > db.blog.findOne()
    {
            "_id" : ObjectId("569f8c0c0124e675dc0e4f0f"),
            "title" : "My Blog Post",
            "content" : "Here's my blog post.",
            "date" : ISODate("2016-01-20T13:29:51.882Z")
    }
    >

      (4) 更新

      update函数用于更新,至少接受两个参数:限定条件(用于匹配需更新的文档)和新的文档。例:为先前写的文章增加评论功能,需要增加一个新的键。

    # 修改变量post,增加"comments"> post.comments=[]
    [ ]
    
    # 执行更新,用新的post替换标题为"My Blog Post"的文章
    > db.blog.update({"title":"My Blog Post"},post)
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    # 查看更新结果
    > db.blog.findOne()
    {
            "_id" : ObjectId("569f8c0c0124e675dc0e4f0f"),
            "title" : "My Blog Post",
            "Content" : "Here's my blog post.",
            "date" : ISODate("2016-01-20T13:34:19.849Z"),
            "comments" : [ ]
    }
    >

      (5) 删除

      使用remove方法可将问答很从数据库永久删除。若未使用任何参数,会将集合内的所有文档全部删除。可接受一个作为限定条件的文档作为参数

    > db.blog.remove({"title":"My Blog Post"})
    WriteResult({ "nRemoved" : 1 })
    >

    windows下mongodb安装与使用整理

  • 相关阅读:
    mysql主从复制读写分离的配置方法详解
    JS如何给ul下的所有li绑定点击事件,点击使其弹出下标和内容
    C#中的参数和调用方式(可选参数、具名参数、可空参数)
    关于HTML5的data-*自定义属性的总结
    在Java代码中解析html,获取其中的值方法
    Java面向对象之成员隐藏与属性封装操作示例
    《设计原本》读书笔记03
    java双重检查锁定的实现代码
    微信公众号开发之设置自定义菜单实例代码【java版】
    深入学习Redis(3):主从复制
  • 原文地址:https://www.cnblogs.com/mengrennwpu/p/5123075.html
Copyright © 2011-2022 走看看