MongoDB学习笔记(二) 增删改查

1、基本概念

由于 MongoDB 和我们常用的关系型数据库也有一定的联系,这里先给大家说一下,便于 类比学习

关系型数据库 MongoDB
数据库 数据库
集合
文档
字段

(1)数据库

MongoDB 的单个实例可以容纳多个独立的数据库,不同的数据库放置在不同的文件中

(2)集合

集合是 MongoDB 文档的集合,类似于关系型数据库中表的概念

集合没有固定的结构,可以在集合中插入不同格式和类型的数据,但是通常情况下这些数据都有一定的关联性

(3)文档

文档是一组键值对,类似于关系型数据库中行的概念,其数据结构与 JSON 基本一样

文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,但是文档中的键值对必须是有序的

2、数据库操作

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将默认存放在 test 数据库中

(1)创建数据库

use DATABASE_NAME

如果数据库存在,则切换到指定的数据库;如果数据库不存在,则创建数据库

例如,以下的命令将会创建 myDB 数据库:

> use myDB
switched to db myDB

(2)查看已有数据库

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

注意:刚刚创建的数据库并不会出现在数据库列表中,只有向新创建的数据库中插入数据后,才会显示

(3)查看当前数据库

> db
myDB

(4)删除当前数据库

> db.dropDatabase()
{ "ok" : 1 }

3、集合操作

(1)创建集合

db.createCollection(
    COLLECTION_NAME,
    {
        capped: <boolean>,      // 可选,若为 true,则创建固定集合,且此时必须要指定 size 参数
        autoIndexId: <boolean>, // 可选,若为 true,则自动在 `_id` 字段创建索引
        size: <number>,         // 可选,为固定集合指定可以使用的最大空间(以字节计)
        max: <number>           // 可选,为固定集合指定包含文档的最大数量
    }
)

注意:在 MongoDB 中,创建集合之后要再插入文档,集合才会真正创建

例如,以下的命令将会在 myDB 数据库中创建 myCol 集合:

> use myDB
switched to db test
> db.createCollection("myCol")
{ "ok" : 1 }

(2)查看已有集合

> show collections
myCol

(3)删除集合

db.COLLECTION_NAME.drop()

例如,以下的命令将会删除 myDB 数据库中的 myCol 集合:

> db.myCol.drop()
true

4、文档操作

(1)插入文档

db.COLLECTION_NAME.insert(document)

注意:如果集合不在数据库中, MongoDB 将会自动创建该集合并插入文档

例如,以下的命令将会向 myDB 数据库中的 myCol 集合插入文档:

> use myDB
switched to db myDB
> db.myCol.insert({"name":"MongoDB"})
WriteResult({ "nInserted" : 1 })

(2)查询文档

db.COLLECTION_NAME.find(
    query,      // 可选,指定查询文档的条件
    projection  // 可选,使用投影操作指定返回的键,默认省略,表示返回文档中所有的键
)

例如,以下的命令将会查询 name 字段等于 MongoDB 的文档:

> db.myCol.find({"name":"MongoDB"})
{ "_id" : ObjectId("5c7c069826cb01475e68f64e"), "name" : "MongoDB" }

(3)更新文档

db.COLLECTION_NAME.update(
    query,      // 指定被更新的对象
    update,     // 指定更新对象
    {
        upsert: <boolean>,  // 可选,指定如果不存在被更新的对象时是否插入更新对象,默认为 false
        multi: <boolean>,   // 可选,若为 true,则更新所有符合条件的记录,默认为 false
        writeConcern: <document>    // 可选,指定抛出异常的级别
    }
)

例如,以下的命令将会更新 myDB 数据库中的 myCol 集合中的数据字段 name:

> db.myCol.update({"name":"MongoDB"},{$set:{"name":"MySQL"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

(4)删除文档

db.COLLECTION_NAME.remove(
    query,  // 指定被删除的对象
    {
        justOne: <boolean>,         // 可选,若为 true,则只删除一个文档,默认为 false
        writeConcern: <document>    // 可选,定义抛出异常的级别
    }
)

例如,以下的命令将会删除 myDB 数据库中的 myCol 集合中的 name 字段等于 MySQL 的文档:

> db.myCol.remove({"name":"MySQL"})
WriteResult({ "nRemoved" : 1 })

5、查询条件

描述 操作符 格式
等于 {<key>:<value>}
不等于 $ne {<key>:{$ne:<value>}}
小于 $lt {<key>:{$lt:<value>}}
小于等于 $lte {<key>:{$lte:<value>}}
大于 $gt {<key>:{$gt:<value>}}
大于等于 $gte {<key>:{$gte:<value>}}
AND 条件 {<key1>:<value1>,<key2>:<value2>}
OR 条件 $or {$or:[{<key1>:<value1>},{<key2>:<value2>}]}
正则表达式 {<key>:/<REGULAR_EXPRESSION>/}

6、处理方法

  • pretty() 方法可以格式化输出:
db.COLLECTION_NAME.find().pretty()
  • limit() 方法指定读取一定数量的记录数,参数 NUMBER 用于指定数量
db.COLLECTION_NAME.find().limit(NUMBER)
  • skip() 方法指定跳过一定数量的记录数,参数 NUMBER 用于指定数量
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
  • sort() 方法用于对数据进行排序,参数 KEY 指定根据哪个键值进行排序

参数 VALUE 指定根据什么方式进行排序,若为 1 则指定升序排列,若为 -1 则指定降序排列

db.COLLECTION_NAME.find().sort({KEY:VALUE})

【 阅读更多 MongoDB 系列文章,请看 MongoDB学习笔记

猜你喜欢

转载自www.cnblogs.com/wsmrzx/p/11564282.html
今日推荐