Php/docs/mongocollection.find
说明
public MongoCollection::find
([ array $query
= array()
[, array $fields
= array()
]] ) : MongoCursor
参数
query
要搜索的字段。 MongoDB 的查询语言十分宽泛。 PHP 驱动在几乎所有的情况下会把查询直接传入服务器,所以阅读 MongoDB 关于 » find 的核心文档是个不错的主意。
Warning
请确保所有指定的查询操作符(以
$
开头)是用单引号的,这样 PHP 才不会尝试用$exists
变量的值来替换"$exists"
命令。fields
返回结果的字段。Array 的格式是
array('fieldname' => true, 'fieldname2' => true)
。_id
字段总会返回。
返回值
返回搜索结果的游标。
范例
Example #1 MongoCollection::find() 例子
该例子演示了基本的搜索选项。
<?php$m = new MongoClient();$db = $m->selectDB('test');$collection = new MongoCollection($db, 'produce');// 搜索水果$fruitQuery = array('Type' => 'Fruit');$cursor = $collection->find($fruitQuery);foreach ($cursor as $doc) { var_dump($doc);}// 搜索甜的产品 Taste is a child of Details. $sweetQuery = array('Details.Taste' => 'Sweet');echo "Sweet\n";$cursor = $collection->find($sweetQuery);foreach ($cursor as $doc) { var_dump($doc);}?>
以上例程会输出:
array(4) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "50a87dd084f045a19b220dd6" } ["Name"]=> string(5) "Apple" ["Type"]=> string(5) "Fruit" ["Details"]=> array(2) { ["Taste"]=> string(5) "Sweet" ["Colour"]=> string(3) "Red" } } array(4) { ["_id"]=> object(MongoId)#8 (1) { ["$id"]=> string(24) "50a87de084f045a19b220dd7" } ["Name"]=> string(5) "Lemon" ["Type"]=> string(5) "Fruit" ["Details"]=> array(2) { ["Taste"]=> string(4) "Sour" ["Colour"]=> string(5) "Green" } } Sweet: array(4) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "50a87dd084f045a19b220dd6" } ["Name"]=> string(5) "Apple" ["Type"]=> string(5) "Fruit" ["Details"]=> array(2) { ["Taste"]=> string(5) "Sweet" ["Colour"]=> string(3) "Red" } }
更多关于游标如何使用的信息,参见 MongoCursor。
Example #2 MongoCollection::find() 例子
这个例子演示了如何搜索一个范围。
<?php$m = new MongoClient();$db = $m->selectDB('test');$collection = new MongoCollection($db, 'phpmanual');// search for documents where 5 < x < 20$rangeQuery = array('x' => array( '$gt' => 5, '$lt' => 20 ));$cursor = $collection->find($rangeQuery);foreach ($cursor as $doc) { var_dump($doc);}?>
以上例程会输出:
array(2) { ["_id"]=> object(MongoId)#10 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000000" } ["x"]=> int(12) } array(2) { ["_id"]=> object(MongoId)#11 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000001" } ["x"]=> int(12) }
更多关于游标如何使用的信息,参见 MongoCursor。
Example #3 使用 $where 的 MongoCollection::find() 例子
这个例子演示了如何搜索一个集合,并用 javascript 代码来筛选结果集。
<?php$m = new MongoClient();$db = $m->selectDB('test');$collection = new MongoCollection($db, 'phpmanual');$js = "function() { return this.name == 'Joe' || this.age == 50;}";$cursor = $collection->find(array('$where' => $js));foreach ($cursor as $doc) { var_dump($doc);}?>
以上例程会输出:
array(3) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000002" } ["name"]=> string(3) "Joe" ["age"]=> int(20) }
Example #4 使用 $in 的 MongoCollection::find() 例子
这个例子演示了使用 $in 操作符来搜索集合。
<?php$m = new MongoClient();$db = $m->selectDB('test');$collection = new MongoCollection($db, 'phpmanual');$cursor = $collection->find(array( 'name' => array('$in' => array('Joe', 'Wendy'))));?>
以上例程会输出:
array(3) { ["_id"]=> object(MongoId)#7 (1) { ["$id"]=> string(24) "4ebc3e3710b89f2349000002" } ["name"]=> string(3) "Joe" ["age"]=> int(20) }
Example #5 以数组形式获取结果集
返回 MongoCursor。 常常在开始的时候,人们更习惯使用数组。 使用 iterator_to_array() 将游标转换成一个数组。
<?php$m = new MongoClient();$db = $m->selectDB('test');$collection = new MongoCollection($db, 'phpmanual');$cursor = $collection->find();$array = iterator_to_array($cursor);?>
以上例程会输出:
array(3) { ["4ebc40af10b89f5149000000"]=> array(2) { ["_id"]=> object(MongoId)#6 (1) { ["$id"]=> string(24) "4ebc40af10b89f5149000000" } ["x"]=> int(12) } ["4ebc40af10b89f5149000001"]=> array(2) { ["_id"]=> object(MongoId)#11 (1) { ["$id"]=> string(24) "4ebc40af10b89f5149000001" } ["x"]=> int(12) } ["4ebc40af10b89f5149000002"]=> array(3) { ["_id"]=> object(MongoId)#12 (1) { ["$id"]=> string(24) "4ebc40af10b89f5149000002" } ["name"]=> string(3) "Joe" ["age"]=> int(20) } }
使用 iterator_to_array() 会让驱动将强制载入所有搜索结果集到内存,所以对超过内存大小的结果集不要这么做!
同时,有些系统集合不具有 _id
字段。
如果你处理一个可能没有 _id
字段的集合,需要将 false
传入
iterator_to_array() 第二个参数(这样它不会尝试使用不存在的 _id
的值作为数组键)。
参见
- MongoCollection::findOne() - Queries this collection, returning a single element
- MongoCollection::insert() - 插入文档到集合中
- MongoDB » find 的核心文档。