介绍

什么是MongoDB ?

  • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
  • MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

特点

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=”Sameer”,Address=”8 Gandhi Road”)来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

语言支持

支持语言 - - - - -
Java PHP Python Ruby Go C
C++ C# .NET Scala node.JS Lisp
JavaScript Haskell Erlang Perl - -

数据库

创建数据库

1
use demo

查看使用中的数据库

1
db

集合

创建集合

name:集合名称
options:可选参数, 指定有关内存大小及索引的选项

1
db.createCollection(name, options)

例子:

1
db.createCollection("demoList")

字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合。
固定集合是指有着固定大小的集合,
当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
3.2 之后不再支持该参数。
size 数值 (可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。

查看已存在的集合

show collections;

删除集合

1
db.集合名称.drop();

文档

插入文档

1
db.集合名称.insert(document);
  • 语法格式:

    1
    2
    3
    4
    5
    6
    7
    db.集合名称.insertMany(
    [ <document 1> , <document 2>, ... ],
    {
    writeConcern: <document>,
    ordered: <boolean>
    }
    )

    document:要写入的文档。
    writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
    ordered:指定是否按顺序写入,默认 true,按顺序写入。

    注意:如果不存在集合名称,则插入时,会自动创建该集合并插入文档。

  • 例子:

    1
    2
    3
    4
    5
    6
    7
    db.demoList.insert({title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库2',
    by: '菜鸟教程2',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 200
    })

查看文档

1
2
3
db.demoList.find();

db.demoList.find().pretty()

更新文档

  • 语法格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    db.集合名称.update(
    <query>,
    <update>,
    {
    upsert: <boolean>,
    multi: <boolean>,
    writeConcern: <document>
    }
    )

    query : update的查询条件,类似sql update查询内where后面的。
    update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
    upsert : 可选,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    multi : 可选,默认是false,只更新找到的第一条记录,若为true,就把按条件查出来多条记录全部更新。
    writeConcern :可选,抛出异常的级别。

  • 例子:

    1
    2
    3
    4
    5
    // 只修改第一条记录
    db.demoList.update({'title': 'MongoDB 教程'}, {$set:{'title': 'MongoDB'}})

    // 修改多条记录
    db.demoList.update({'title': 'MongoDB 教程'}, {$set: {'title': 'MongoDB'}}, {multi: true})

    只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

删除文档

  • 语法格式:

    1
    2
    3
    4
    db.集合名称.remove(
    <query>,
    <justOne>
    )

    如果MongoDB2.6 版本以后的,语法格式如下:

    1
    2
    3
    4
    5
    6
    7
    db.集合名称.remove(
    <query>,
    {
    justOne: <boolean>,
    writeConcern: <document>
    }
    )

    query:(可选)删除的文档的条件。
    justOne: (可选)如果设为 true 或 1,则只删除一个文档,
    如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
    writeConcern:(可选)抛出异常的级别。

  • 例子

    1
    2
    3
    4
    5
    6
    7
    8
    // 按条件删除
    db.demoList.remove({'title':'MongoDB 教程'})

    // 删除第一条
    db.demoList.remove(DELETION_CRITERIA, 1)

    // 删除所有
    db.demoList.remove({})