1、基本概念
由于 MongoDB和我们常用的关系型数据库也有一定的联系,这里先给大家说一下,便于 类比学习
关系型数据库 | MongoDB |
数据库 | 数据库 |
表 | 集合 |
行 | 文档 |
列 | 字段 |
(1)数据库
MongoDB 的单个实例可以容纳多个独立的数据库,不同的数据库放置在不同的文件中
(2)集合
集合是 MongoDB 文档的集合,类似于关系型数据库中表的概念
集合没有固定的结构,可以在集合中插入不同格式和类型的数据,但通常情况下这些数据都有一定的关联
(3)文档
文档是一组键值对,类似于关系型数据库中行的概念,其数据结构与 JSON 基本一样,称为 BSON
文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,但是文档中的键值对必须是有序的
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 // 可选,使用投影操作指定返回的键,默认省略,表示返回文档中所有的键 )
常见的查询条件如下:
描述 | 操作符 | 格式 |
等于 | {<key>:<value>} |
|
不等于 | $ne | {<key>:{$ne:<value>}} |
小于 | $lt | {<key>:{$lt:<value>}} |
小于等于 | $lte | {<key>:{$lte:<value>}} |
大于 | $gt | {<key>:{$gt:<value>}} |
大于等于 | $gte | {<key>:{$gte:<value>}} |
ND 条件 | {<key1>:<value1>,<key2>:<value2>} |
|
OR 条件 | $or | {$or:[{<key1>:<value1>},{<key2>:<value2>}]} |
例如,以下的命令将会查询 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 })