一、引言
上一篇文章我们已经介绍了MongoDB数据库的最基本操作,包括数据库的创建、使用和删除数据库,文档的操作也涉及到了文档的创建、删除、更新和查询,当然也包括集合的创建、重命名和删除。有了这些基本操作,大家第一次使用MongoDb数据库的时候就不会慌张,慢慢操作就可以了。虽然上一篇文章简单介绍了一些文档的查询,那都是最基本的,由于文档的查询涉及的内容比较多,所以我们需要单独写一篇文章来专门介绍有关文档的查询的详细信息。废话不多说,马上开始我们今天的写作吧。
二、MongDB查询的详解
我比较直接,直接上内容,有关查询的每个方法都有示例代码,应该不是很难。
1、find()查询方法:根据查询条件返回符合条件的所有文档
MongoDB 查询文档使用 find() 方法,find() 方法以非结构化的方式来显示所有文档。
语法:db.collectionName.find(query,projection)
参数说明:
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。格式类似{<key>:1,<key>:1,_id:0},0值表示不显示,其他值均为显示,无论正负值。该参数控制不显示的字段,需要显示的不在该参数里书写就可以。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
>db.collectionName.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
1.1、示例代码:查询所有文档
//find()方法内没有任何查询条件,查询所有记录,find({})方法表示空条件,也就是无条件,和find()方法查询结果一样。 > db.students.find() { "_id" : ObjectId(5ab9de223afa6504457050e2"),name" : FangShiYu",1)">age22,1)">sex1,1)">schoolZheJiangDaXueaddressGuangDongGuangZhou" } { 5ab9de223afa6504457050e3YanYongChun27,1)">0,1)">FuJianDaXueFuJianNanTianRen5ab9de3c3afa6504457050e4HuangFeiHong32,1)">GuangDongDaXueGuangDongFoShan } > db.students.find({}) { " }
查询【name】字段的值是【angShiYu】 的文档 > db.students.find({name:}) { } 查询【sex】性别字段是【1】男的所有文档 > db.students.find({sex:1}) { } 查询【sex】性别字段是【1】男的,并且【age】字段的值是【22】的所有文档 > db.students.find({sex:22 } >
//find({查询条件},{控制字段显示与否})方法的第二个参数控制查询出来的字段的显示,_id:0,表示不显示,其他值均为显示,不写该字段也会显示,_id主键除外的字段,需要显示就写上,但是其值不能是0,比如:address:0,这会产生错误,address:1/-1都会显示 查询【sex】性别字段是【1】男的所有文档,_id字段不显示,只显示【name】,【age】,【school】字段 > db.students.find({sex:1},{_id: } >
1.4、示例代码:格式化文档
使用pretty()格式化输出 > db.students.find({sex:0}).pretty() { ),,1)">27 }
2、findOne()查询方法:查询结果只会返回符合条件的第一条文档
MongoDB 查询文档使用 findOne()方法查询符合条件的第一条文档,使用和find()方法类似,并以非结构化的方式来显示所有文档。
语法:db.collectionName.findOne(query,projection)
参数说明:
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。格式类似{<key>:1,_id:0},非0的值表示显示,0表示不显示
findOne()方法不支持pretty()方法。
2.1、示例代码:显示符合条件的第一条记录
性别【sex】是【1】男性的有两条文档,但是只显示了第一条 > db.students.findOne({sex:}) { }
> db.students.findOne({sex:
}
>
2.3、示例代码:findOne()方法不支持pretty()方法
> db.students.find({sex:}).pretty() 2018-03-29T13:27:12.277+0800 E QUERY [thread1] TypeError: db.students.findOne(...).pretty is not a function : @(shell):1:1
3、条件操作符
如果你熟悉常规的 sql 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
3.1、: 等于 :查询指定字段的值等于某个具体的值的时候返回符合条件的文档
语法:db.collectionName.find({<key>:<value>})
参数说明:
key:需要执行查询判断的字段名
value:这个值是一个具体的数值,并且这个值需要和Key字段里面的值进行比较,只有当Key字段的值等于Value的时候,才返回符合条件的文档
实例代码:
> db.students.find({":}) { " }
3.2、$lt 小于:查询指定字段的值小于某个具体的值的时候返回符合条件的文档
语法:db.collectionName.find({<key>:{$lt:<value>}})
参数说明:
key:需要执行查询判断的字段名
value:这个值是一个具体的数值,并且这个值需要和Key字段里面的值进行比较,只有当Key字段的值小于Value的时候,才返回符合条件的文档
实例代码:
>db.students.find({":{$lt:}}) { " }
3.3、$lte 小于或等于 :查询指定字段的值在小于或者等于某个具体的数值时返回所有符合条件的文档
语法:db.collectionName.find({<key>:{$lte:<value>}})
参数说明:
key:需要执行查询判断的字段名
value:这个值是一个具体的数值,并且这个值需要和Key字段里面的值进行比较,只有当Key字段的值小于或者等于Value的时候,才返回符合条件的文档
":{$lte: }
{ }
>