MongoDB文档查询-find()方法介绍

 2016年01月10日    11161     声明


文档查询是MongoDB主要功能之一,在MongoDB中查询使用find方法,也可以使用findOne方法返回单个文档。相比关系型数据库,MongoDB的查询更为方便,MongoDB的查询提供了:条件查询、语义查询、甚至数组等特定类型的查询。


在MongoDB中,find()方法用来查询文档。该方法的返回值是一个表示查询结果的文档子集,其范围是0个文档到整个文档集合。


1. 语法结构

db.collection.find(query, projection)
  • query,可选。表示集合的查询条件。可指定条件查询参数,或一个空对象({})
  • projection,可选。表示查询时所要返回的字段,省略此参数将返回全部字段。其格式如下:
    • { field1: <boolean>, field2: <boolean> ... }
  • 返回值

    返回表示查询文档的游标,即:执行find()方法时其返回的文档,实际是对文档引用的一个游标。

    当指定projection参数时,返回值仅包含指定的字段和_id字段,也可以指定不返回_id字段。

    在Mongo shell中查询时,find()方法默认返回前20条数据,再次执行将继续向前查询


2. 使用示例

查询集合中的所有文档

find()方法不指定任何参数,将返回所有的文档的所有字段。如,查询students集合中的所有数据:

db.students.find()


查询集合中的指定文档

查询集合中指定文档时,需要指定query参数。如,查询年龄小于15的学生:

db.students.find({age:{$lt:15}})


查询集合中的指定文档

_id字段是MongoDB集合文档的标识,每个文档的_id都是唯一的。创建记录时,可以指定该字段值,如果不集定MongoDB将自动创建一个值。同样,通过该字段查询出来的文档也是唯一的:

db.students.find({_id:5})


指定查询操作符

$in操作符相当于关系型数据库中的in()查询,但$in操作符指定查询对象是一个数组。如,查询_id为5或为ObjectId("2d93w03akdie834k26cmsa01")的文档:

db.students.find(
  {
    _id: { $in: [ 5,  ObjectId("2d93w03akdie834k26cmsa01") ] }
  }
)


范围查询

MongoDB同样提供了类型关系型数据库的范围查询功能(between),但MongoDB的范围查询更为简单。如,查询年龄在10〜15之间的学生:

db.students.find({age: {$gt:10, $lt:15}})


指定查询字段

不指定projection参数时,默认会返回文档中的全部字段。当我们只需要查询部分字段时,我们可以指定projection参数。如:

db.products.find( { qty: { $gt: 25 } }, { item: 1, qty: 1 } )

返回值:

{ "_id" : 11, "item" : "pencil", "qty" : 50 }
{ "_id" : ObjectId("50634d86be4617f17bb159cd"), "item" : "bottle", "qty" : 30 }
{ "_id" : ObjectId("50634dbcbe4617f17bb159d0"), "item" : "paper", "qty" : 100 }


明确指定_id字段

_id字段不同于其字段,其不明确指定时默认会返回,所在,在不需要此字段时,需要明确指定。如下:

db.products.find( { qty: { $gt: 25 } }, { _id: 0, qty: 0 } )

返回值:

{ "item" : "pencil", "type" : "no.2" }
{ "item" : "bottle", "type" : "blue" }
{ "item" : "paper" }