限制从一个查询返回的字段
映射指定规则限制从所有匹配文档返回的字段。映射接受从一个文档用纳入或排除的方式从结果集返回字段的列表。您也能指定字段包括(例如 { field: 1 })或者指定字段排除(例如 { field: 0 })。
重要提示
_id字段默信包括在结果集里。要从结果集里排除_id字段,你需要在文档映射里指定_id字段的排除(例如{ _id: 0 })。
除了_id字段,你不可能对包括和排除语义进行组合。
本教程提供各种查询限制匹配文档返回字段的例子。
在mongo命令行下教程的例子用的集合是inventory,方法是 db.collection.find()。 db.collection.find() 方法返回一个游标检索文档。实例的选择查询条件,查看查询文档。
一、在匹配的文档里返回所有的字段
如果你没有指定映射, find()方法返回所有查询到的匹配文档的所有字段。
db.inventory.find( { type: 'food' } )
这个操作返回inventory集合中type字段的值为"food"的所有文档。返回文档包括所有的字段。
二、只返回指定的字段和_id字段
映射可以明确地包含几个字段。在下面的操作中,find()方法返回查询匹配的所有文档。在结果集里,查询匹配的文档只有item和qty字段以及默认的_id字段返回。
db.inventory.find( { type: 'food' }, { item: 1, qty: 1 } )
三、只返回指定字段
可以从结果中,通过指定排除在映射里移除_id字段,就像下面的例子:
db.inventory.find( { type: 'food' }, { item: 1, qty: 1, _id:0 } )
这个操作返回查询匹配的所有文档。在结果集里,只有item和qty字段从匹配的文档里返回。
四、返回除了排除的所有字段
您可以使用映射排除单个字段或字段组,就像下面所示:
db.inventory.find( { type: 'food' }, { type:0 } )
这个操作返回字段type是food的所有的所有文档。在结果集里,匹配查询的文档的type字段不返回。
_id字段例外,在映射文档里你不能组合包含和排除语句。
五、映射数组字段
$elemMatch和$slice映射运算符是映射数组部分的唯一途径。
提示:
除非你用$elemMatch和$slice映射操作符时,MongoDB不支持数组部分的映射。