php教程

MongoCursor::hint

(PECL mongo >=0.9.0)

MongoCursor::hintGives the database a hint about the query

说明

public MongoCursor::hint ( mixed $index ) : MongoCursor

参数

index

Index to use for the query. If a string is passed, it should correspond to an index name. If an array or object is passed, it should correspond to the specification used to create the index (i.e. the first argument to MongoCollection::ensureIndex()).

返回值

Returns this cursor.

错误/异常

Throws MongoCursorException if this cursor has started iterating.

更新日志

版本 说明
1.4.0

The index argument now supports index names as string values. In versions before 1.4.0, only array or object values were accepted.

User Contributed Notes

mr dot bipinks at gmail dot com 18-Aug-2015 04:18
For the series we'll assume we have a collection named posts populated with 500 documents having the following structure:

{
    "_id": ObjectId("5146bb52d852470060001f4"),
    "comments": {
        "0": "This is the first comment",
        "1": "This is the second comment"
    },
    "post_likes": 40,
    "post_tags": {
        "0": "MongoDB",
        "1": "Tutorial",
        "2": "Indexing"
    },
    "post_text": "Hello Readers!! This is my post text",
    "post_type": "private",
    "user_name": "Mark Anthony"
}

The hint() method can be used to force MongoDB to use an index we specify and override the default selection and query optimization process. You can specify the field names used in the index as a argument as shown below:

<?php
// query to find posts with type public and 100 likes
// use hint() to force MongoDB to use the index we created
$cursor = $collection
   
->find(
        array(
           
"post_type" => "public",
           
"post_likes" => 100
       
)
    )
    ->
hint(
        array(
           
"post_type" => 1,
           
"post_likes" => 1
       
)
    );
?>

This ensures the query uses the compound index defined on the post_type and post_likes fields.

CopyRight © 2008-2022 verySource.Com All Rights reserved. 京ICP备17048824号-1 京公网安备:11010502034788