hint()

语法

query.hint( )

类别

SdbQuery

描述

按指定的索引遍历结果集。

参数

参数名参数类型默认值描述是否必填
hintJSON—-指定访问计划,加快查询速度

Note:
1. hint 参数是一个 Json 对象。数据库不关心该对象的字段名,而是通过其字段值来确认需要使用的索引名称。当字段值为 null 时,表示表扫描。使用 hint 参数的格式为: { "": null }、 { "": "indexname" }、 { "0": "indexname0", "1": "indexname1", "2": "indexname2" }
2. v3.0 之前,当使用 hint() 指定索引时,数据库一旦遍历到能够使用的索引(或者表扫描)时,便会停止遍历,进而转向使用该索引(或表扫描)进行数据查找。
3. v3.0 开始,数据库在选择索引时,会基于数据和索引的统计模型进行综合分析,最终会选择一个最恰当的索引使用。所以,从 v3.0 开始,当使用 hint() 指定多个索引时,数据库将能够选择最合适当前查询的索引。

返回值

返回查询结果集的游标。

错误

如果出错则抛异常,并输出错误信息,可以通过getLastErrMsg()获取错误信息或通过getLastError()获取错误码。 关于错误处理可以参考常见错误处理指南

常见错误可参考错误码

示例

  • 强制要求查询走表扫描。

    1. > db.foo.bar.find( {age: 100 } ).hint( { "": null } )
  • 使用索引 ageIndex 遍历集合 bar 下存在 age 字段的记录,并返回。

    1. > db.foo.bar.find( {age: {$exists:1} } ).hint( { "": "ageIndex" } )
    2. {
    3. "_id": {
    4. "$oid": "5cf8aef75e72aea111e82b38"
    5. },
    6. "name": "tom",
    7. "age": 20
    8. }
    9. {
    10. "_id": {
    11. "$oid": "5cf8aefe5e72aea111e82b39"
    12. },
    13. "name": "ben",
    14. "age": 21
    15. }
    16. {
    17. "_id": {
    18. "$oid": "5cf8af065e72aea111e82b3a"
    19. },
    20. "name": "alice",
    21. "age": 19
    22. }
  • 提供若干索引,供数据库选择。数据库将基于数据和索引统计,选择最优的索引使用。

    1. > db.foo.bar.find( { age: 100 } ).hint( { "1": "aIndex", "2": "bIndex", "3":"cIndex" } )