读操作概述
读操作,或查询,检索存储在数据库中的数据。在MongoDB,查询选择文档在单一的集合中进行。
查询指定标准,或条件。符合条件的文档MongoDB返回到客户端。一个查询返回的匹配的文档的
指定的字段可以包含一个映射。映射限制了MongoDB从网络传到客户端的数据的量。
查询界面
对于查询操作,MongoDB提供了一个db.collection.find()方法.该方法接受查询条件和
映射,并返回匹配的文档的游标。您可以有选择地修改查询上限,跳过,和对查询排序
下图突出了MongoDB的查询操作的部分:
一个MongoDB的查询操作的部分。
下面的图显示了用sql进行的类似的操作。
SQL SELECT语句的组成部分。
例如
db.users.find( { age: { $gt: 18 } }, { name: 1, address: 1 } ).limit(5)
在users集合里查询年龄大于18的文档。指定大于条件,查询标准用大于号(例如 $gt)查询运
算操作。查询最多返回5个符合条件的文档(或者更确切地说,那些文档的游标)。匹配的文档
将只返回_id,name和address字段。
查询行为
MongoDB的查询表现为以下行为:
1.所有MongoDB的查询都在单一的集合里进行。
2.你能对果询结果进行限制,跳过和排序。
3.返回文档的顺序不是固定的,除非你用sort()指定了排序。
4.对已有的文档进行修改(例如更新)用同样的语法进行查询筛选文件。
5.在聚集管道中, $match管道对MongoDB的查询提供分段访问。
MongoDB中提供了一个db.collection.findOne()方法,它是find()的一个特例,只返回一个
文档。
查询语句
考虑查询的过程,它指定了查询条件和排序修饰符,如下图:
一个MongoDB的查询与查询条件和排序修改的阶段图。
在图表中,从users集合中查找文档.为匹配的文档用一个查询选择操作符去定义查询的条件.查
询条件是年龄大于(例如$gt)18的文档。对查询到的结果按年龄进行升序排列。
映射
默认情况下MongoDB返回匹配文档的所有字段。为了限制MongoDB发送到应用程序的数据的数量.
包括了在查询中的映射。通过用字段的子集的突出想要的结果,减少了网络的开销和处理要求。
Projections,用两个参数传递给find()方法。可直接指定字段的返回列表或排除在结果之外的
字段列表。
重要提示
除不包括包容性projections的_id字段,你不能混用排他性和包容性的projections。
考虑指定查询条件和porjection的查询处理过程的图表.
用查询条件和projection的MongoDB的查询分步图。MongoDB仅返回符合查询条件且被projecte的
数据。
在上面的图表里,从user集合里查找。匹配用户年龄满18的文档。projection公指定匹配的文档
返回name字段.
Porjection 实例
查询结果集排除history字段
db.records.find( { "user_id": { $lt: 42} }, { history: 0} )
从记录集里选择"user_id"小于42的文档,返回的文档的字段不包括history.
返回两个字段,还有_id字段.
db.records.find( { "user_id": { $lt: 42} }, { "name": 1, "email": 1} )
从记录集里选择"user_id"小于42的文档,返回的文档的字段为name,email.
Projection行为
MongoDB projection具有以下的特点:
.在MongoDB中,除非明确的排除,_id字段都是包括在结果里.
.对于包含数组的字段.MongoDB中提供了以下projection运算: $elemMatch, $slice, $。
.对于聚合框架管道相关的projection功能.使用$project pipeline stage.。