一、MongoDB基本概念

1.数据库(database)

与普通关系型数据库一样,为独立的数据集合,一个MongoDB中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。MongoDB的单个实例可以
纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文中。

2.集合(collection)

与关系型数据库中的表相对应,在MongoDB中为多个文档的集合。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,
但通常情况下我们插入集合的数据都会有一定的关联性。

3.文档(document)

与关系型数据库中的行相对应,文档是一组键值(key-value)对(即 BSON)。
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,
这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

4.字段(field)

与关系型数据库中的列相对应,在MongoDB中为文档中的键值

5.索引(index)

与关系型数据库中的表相对应

####6.主键(primary key)
MongoDB自动将_id字段设置为主键

二、MongoDB增删改查命令

1.数据库相关

创建/切换数据库  
    use DATABASE_NAME  如果数据库不存在,则创建数据库,否则切换到指定数据库。

查看数据库
    db        查看当前数据
    show dbs  查看所有数据库,创建的数据库不会显示在该命令下,除非你向其中插入一些数据

删除数据库
    db.dropDatabase()  删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名

2.集合相关(database)

创建集合
    db.createCollection(name, options)
    参数说明:
      - name: 要创建的集合名称
      - options: 可选参数, 指定有关内存大小及索引的选项
删除集合
    db.collection.drop()
      其中collection为集合名

3.文档相关(database)

插入文档
    db.COLLECTION_NAME.insert(document)
    除了insert()方法 save()方法也可以向集合中插入文档

删除文档
    db.COLLECTION_NAME.remove(
           <query>,
           {
             justOne: <boolean>,
             writeConcern: <document>
           }
    )
    参数说明
    - query :(可选)删除的文档的条件。
    - justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
    - writeConcern :(可选)抛出异常的级别

更新文档
    db.COLLECTION_NAME.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 : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    - writeConcern :可选,抛出异常的级别。

查询文档
    db.COLLECTION_NAME.find(query, projection)
    参数说明
    - query :可选,使用查询操作符指定查询条件
    - projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法 db.col.find().pretty()