1.数据库的创建与删除
1.1 创建数据库
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME |
如果数据库不存在,则创建数据库,否则切换到指定数据库。
创建的数据库并不在数据库的列表中, 要显示它,我们需要向数据库插入一些数据。
1.2 删除数据库
MongoDB 删除数据库的语法格式如下:
db.dropDatabase() |
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
要删除数据库mydb需要先切换到mydb数据库
use mydb |
2. 集合的创建与删除
2.1 创建集合
语法格式:
db.createCollection(name, options) |
参数说明:
- name: 要创建的集合名称
- options: 可选参数, 指定有关内存大小及索引的选项
options 可以是如下参数:
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | (可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。
实例:
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } ) |
在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
db.mydb.insert({"name" : "niran"}) |
2.2 删除集合
语法格式:
db.collection.drop() |
返回值:
如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
3. 文档
3.1 插入文档
MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:
db.COLLECTION_NAME.insert(document) |
实例
以下文档可以存储在 MongoDB 的 runoob 数据库 的 col 集合中:
db.col.insert({title: 'MongoDB 教程', |
以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
3.2 更新文档
update() 方法
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update( |
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
实例:
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) |
标题(title)由原来的 “MongoDB 教程” 更新为 “MongoDB”。
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true}) |
save() 方法
save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save( |
参数说明:
- document : 文档数据。
- writeConcern :可选,抛出异常的级别。
实例
以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:
db.col.save({ |
替换成功后,我们可以通过 find() 命令来查看替换后的数据
更多实例
只更新第一条记录: |
3.3 删除文档
语法
remove() 方法的基本语法格式如下所示:
db.collection.remove( |
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove( |
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值false,则删除所有匹配条件的文档。
- writeConcern :(可选)抛出异常的级别。
实例:
db.test.remove({'title':'MongoDB'}) //删除title为MongDB的文档 |
如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1) |
如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):
db.test.remove({}) |
3.4 查询文档
语法
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection) |
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.col.find().pretty() |
pretty() 方法以格式化的方式来显示所有文档。
若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键 |
_id 键默认返回,需要主动指定 _id:0 才会隐藏
两种模式不可混用(因为这样的话无法推断其他键是否应返回)
db.collection.find(query, {title: 1, by: 0}) // 错误 |
只能全1或全0,除了在inclusion模式时可以指定_id为0
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正确 |
MongoDB 与 RDBMS Where 语句比较
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value>} | db.col.find({“by”:”菜鸟教程”}).pretty() | where by = ‘菜鸟教程’ |
小于 | {<key>:{$lt:<value>}} | db.col.find({“likes”:{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({“likes”:{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({“likes”:{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({“likes”:{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({“likes”:{$ne:50}}).pretty() | where likes != 50 |
MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:
db.col.find({key1:value1, key2:value2}).pretty() |
实例
以下实例通过 by 和 title 键来查询 菜鸟教程 中 MongoDB 教程 的数据
db.col.find({"by":"niran", "title":"MongoDB 教程"}).pretty() |
以上实例中类似于 WHERE 语句:WHERE by=’菜鸟教程’ AND title=’MongoDB 教程’
如果是 qty 大于 50 小于 80 不能这样写:
db.posts.find( { qty: { $gt: 50 }, qty: { $lt: 80 } } )
应该这样:
db.posts.find( { qty: { $gt: 50 ,$lt: 80}} )
MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
db.col.find( |
实例
以下实例中,我们演示了查询键 by 值为 菜鸟教程 或键 title 值为 MongoDB 教程 的文档。
db.col.find({$or:[{"by":"niran"},{"title": "MongoDB 教程"}]}).pretty() |
AND 和 OR 联合使用
以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where likes>50 AND (by = ‘菜鸟教程’ OR title = ‘MongoDB 教程’)’
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() |
模糊查询
查询 title 包含"教"字的文档: |
3.5 MongoDB Limit与Skip方法
MongoDB Limit() 方法
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法
limit()方法基本语法如下所示:
db.COLLECTION_NAME.find().limit(NUMBER) |
MongoDB Skip() 方法
我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
语法
skip() 方法脚本语法格式如下:
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) |
实例
以下实例只会显示第二条文档数据
db.col.find({},{"title":1,_id:0}).limit(1).skip(1) |
注:skip()方法默认参数为 0 。
3.5 MongoDB排序
MongoDB sort() 方法
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
语法
sort()方法基本语法如下所示:
db.COLLECTION_NAME.find().sort({KEY:1}) |
实例
col 集合中的数据如下:
db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) |
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。