伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

PHP - Manual: MongoCollection::find

来源:网络转载 浏览:54次 时间:2022-11-25
MongoCollection::findAndModify » « MongoCollection::ensureIndex PHP 手册 函数参考 数据库扩展 针对各数据库系统对应的扩展 Mongo 核心类 MongoCollection

MongoCollection::find

(PECL mongo >=0.9.0)

MongoCollection::find — 查询该集合,并返回结果集的 MongoCursor

说明

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 的核心文档。
add a note

User Contributed Notes 5 notes

up down 7 nospam at alexyves dot fr8 years ago This will work with versions >=1.5.3, please note that this is just a example of the way to use the or statement.

<?php
  $connection = new Mongo();

  $db = $connection->test;
  $collection = $db->test;
  // Clean the DB before the test.
  $collection->drop();
  $collection = $db->test;

  $apple = array(
    'fruit' => 'Apple',
    'type' => 'Juice',
  );

  $orange = array(
    'fruit' => 'Orange',
    'type' => 'Marmalade',
  );

  $collection->insert($apple);
  $collection->insert($orange);

  // Basic find
  $results = $collection->find(array('fruit' => 'Apple'));

  foreach($results as $result)
  {
    echo sprintf("Fruit: %s, Type: %s%s", $result['fruit'], $result['type'], PHP_EOL);
  }
?>

Output:

Fruit: Apple, Type: Juice

Now an advanced search with "or" statement.

<?php
  // Advanced find with "OR" note the double array.
  // if you use double quotes escape the or "\$or"
  $results = $collection->find( array( '$or' => array( array('fruit' => 'Apple'), array('fruit' => 'Orange') ) ) );

  foreach($results as $result)
  {
    echo sprintf("Fruit: %s, Type: %s%s", $result['fruit'], $result['type'], PHP_EOL);
  }
?>

Output:

Fruit: Apple, Type: Juice
Fruit: Orange, Type: Marmalade
up down 7 Nanhe Kumar5 years ago <?php
$m = new MongoClient();
$db = $m->selectDB('school');
$collection = new MongoCollection($db, 'student');
//Find where class=5
$where=array('class'=>5);
$cursor = $collection->find($where);

//Find where class !=5
$where=array('class' => array('$ne'=>5));
$cursor = $collection->find($where);

//Find where age >20
$where=array('age' => array('$gt'=>20));
$cursor = $collection->find($where);

//Find where age >=20
$where=array('age' => array('$gte'=>20));
$cursor = $collection->find($where);

//Find where age <20
$where=array('age' => array('$le'=>20));
$cursor = $collection->find($where);

//Find where age <=20
$where=array('age' => array('$lte'=>20));
$cursor = $collection->find($where);

//Finc where class=10 or marks=80
$where=array( '$or' => array( array(' class' =>10), array('marks'=>80) ) );
$cursor = $collection->find($where);
//Finc where class=12 AND marks=70
$where=array( '$and' => array( array(' class' =>12), array('marks'=>70) ) );
$cursor = $collection->find($where);

?>
up down 3 artusdebenque at yahoo dot fr5 years ago For the fields parameter, the documentaion says: "The _id field is always returned".
Knowing that mongodb allows you to uncheck the _id field ("the _id field is the only field that you can explicitly exclude"; source: http://docs.mongodb.org/manual/reference/method/db.collection.find/#db.collection.find), I tried it with php and it works : you can exclude the _id field.

Example : the following fields parameter will exclude the field "_id"

$fields = array('timestamp' => true, 'rank' => true, '_id' => false);
up down 2 bronius dot motekaitis at gmail dot com4 years ago As the docs specify, '$or' conditions (and similar) get passed right on to MongoDB directly. It appears that to make a simple "field, $or, field" compound query work, all parts must be wrapped as a gigantic $and.
Here's how I got a find(), findOne(), and findAndModify() to obey such a compound $or for matching on fields, one of which is represented in data as either a string or integer:
<?php
  $query =
    array('$and' =>
      array(
        array('assessment_id' => $doc->assessment_id),
        array('$or' =>
          array(
            array('participant_id' => $doc->participant_id),
            array('participant_id' => (string)$doc->participant_id),
          ),
        ),
        array('measure_id' => $doc->measure_id)
      ),
    );
  $thedoc = $collection->findOne($query);
  return $thedoc;
?>
up down -6 vsaurabh dot aec at gmail dot com2 years ago example of sort and find

$client = new MongoDB\Client("mongodb://localhost:27017");
$product = $client->db->product;
$filter = [];
$options = ['sort' => ['catid' => 1], 'limit' => 10];
$list = $product->find($filter, $options);
add a note

官方地址:https://www.php.net/manual/en/mongocollection.find.php

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net