本篇文章中将讲解如何使用mongodb操作文档。
文档的数据结构和json基本一致,所有存储在集合中的数据都是bson格式。bson是一种类似json格式的一种二进制形式的存储格式,简称binary json。
一、插入文档
mongodb使用insert()或save()方法向集合中插入文档,语法如下:
例如:以下文档可以存储在mongodb的test数据库的mongodbtest集合中:
1、使用insert()方法插入文档
在上面的例子中,mongodbtest是我们的集合名,如果该集合不在该数据库中,mongodb会自动创建该集合并插入文档。doc是定义的变量,可以以变量的形式插入集合。
查看已经插入的文档:
2、使用save()方法插入文档
插入文档也可以使用save()方法。如果不知道_id字段save()方法类似于insert()方法。如果指定_id字段,则会更新该_id的数据。
下面的例子表示使用save()命令更新数据:
二、查询文档
mongodb查询文档使用find()方法。
find()方法以非结构化的方式来显示所有文档。
1、语法
mongodb查询数据的语法格式如下:
参数说明:
- query:可选参数,使用查询操作符指定查询条件。
- projection:可选参数,使用投影操作符指定返回的键。如果查询时要返回文档中所有键值,只需省略该参数即可(默认省略)。
如果你需要格式化读取的数据,可以使用pretty()方法,语法格式如下:
pretty()方法以格式化的方式来显示所有文档。
2、实例
例如:查询student集合中的所有文档。
除了find()方法之外,还有一个findone()方法,它只返回一个文档。
mongodb与rdbms where语句比较
如果你熟悉常规的sql数据,通过下表可以更好的理解mongodb的条件语句查询:
操作 | 格式 | 范例 | rdbms中的类似语句 |
等于 | {<key>:<value>} | db.student.find({“name”:”张三”}).pretty() | where name=’张三’ |
小于 | {<key>:{$lt:<value>}} | db.student.find({“score”:{$lt:”80″}}).pretty() | where score<80 |
小于或等于 | {<key>:{$lte:<value>}} | db.student.find({“score”:{$lte:”80″}}).pretty() | where score<=80 |
大于 | {<key>:{$gt:<value>}} | db.student.find({“score”:{$gt:”80″}}).pretty() | where score>80 |
大于或等于 | {<key>:{$gte:<value>}} | db.student.find({“score”:{$gte:”80″}}).pretty() | where score>=80 |
不等于 | {<key>:{$ne:<value>}} | db.student.find({“score”:{$ne:”80″}}).pretty() | where score!=80 |
(1)查询name是张三的学生
查询结果如下图所示:
(2)查询成绩小于80的学生
查询结果如下图所示:
(3)查询成绩小于等于80的学生
查询结果如下图所示:
(4)查询成绩大于80分的学生
(5)查询成绩大于等于80分的学生
查询结果如下图所示:
(6)查询成绩不等于80分的学生
查询结果如下图所示:
3、mongodb and条件查询
mongodb的find()方法可以传入多个键(key),每个键(key)以逗号分隔开,等价于常规sql的and条件。
语法格式如下:
例如:查询姓名为张三并且课程是c#程序设计的学生信息。
查询结果如下图所示:
以上实例中类似于rdbms中的where语句:where name=’张三’ and subject=’c#程序设计’。
4、mongodb or 条件查询
mongodb的or条件语句使用了关键字$or,语法格式如下:
例如:查询姓名是李四或者成绩等于80的学生
查询结果如下图所示:
三、更新文档
mongodb使用update()和save()方法来更新集合中的文档。接下来让我们详细来看下两个方法的应用及其区别。
1、update()方法
update()方法用于更新已经存在的文档。语法格式如下:
参数说明:
- query:update的查询条件,类似sql update查询内where后面的条件。
- update:update的对象和一些更新的操作符(如$set,sinc……)等,也可以理解为sql update查询内set后面的。
- upsert:可选参数,这个参数的意思是:如果不存在update的记录,是否插入新的文档。如果为true则插入,默认是false不插入。
- multi:可选参数,mongodb默认是false,只更新找到的第一条记录。如果这个参数为true,就把按条件查询出来的多条记录全部更新。
- writeconcern:可选参数,抛出异常的级别。
writeconcern的几种抛出异常的级别参数
- writeconcern.none:没有异常抛出。
- writeconcern.normal:仅抛出网络错误异常,没有服务器错误异常抛出。
- writeconcern.safe:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
- writeconcern.majority:抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
- writeconcern.fsync_safe:抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
- writeconcern.journal_safe:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
- writeconcern.replicas_safe:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。
例如:使用update()方法更新标题(title)
上面的语句只会更新第一条查询到的文档,如果你要更新多条相同的文档,则需要设置multi参数为true。
如果要更新的数据不存在,upsert参数设置为true则会插入数据。
2、save()方法
save()方法通过传入的文档来替换已有文档,语法格式如下:
参数说明:
- document:要更新的文档数据。
- writeconcern:可选参数,抛出异常的级别。
例如:更新_id=5a702a7f2c6ed8f4d3491831的文档。
四、删除文档
mongodb使用remove()方法来移除集合中的数据。
注意:在执行remove()方法前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。
remove()方法的基本语法格式如下:
如果mongodb是2.6版本以后的,语法格式如下:
参数说明:
- query:可选参数,删除文档的条件。
- justone:可选参数,如果设为true或1,则只删除一个文档。
- writeconcern:可选参数,抛出异常的级别。
实例
1、删除title为mongodb教程的文档,只删除一个:
2、删除所有数据
如果想删除所有数据,可以使用下面的例子
到此这篇关于使用mongodb操作文档的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。