SdbQueryOption

    包括指定匹配条件、返回记录字段名、排序情况、索引情况以及对返回结果集的处理等参数。

    SdbQueryOption[.cond(<cond>)]         [.sel(<sel>)]         [.sort(<sort>)]         [.hint(<hint>)]         [.skip(<skipNum>)]         [.limit(<retNum>)]         [.update(<rule>, [returnNew], [options])]         [.remove()]

    SdbQueryOption[.cond()][.skip()][.limit()]

    SdbQueryOption[.cond(<cond>)][.update(<rule>, [returnNew], [options])]

    SdbQueryOption[.cond(<cond>)][.remove()]

    记录匹配条件。

    sel(<sel>)

    查询返回记录的字段名。

    参数名参数类型描述是否必填
    selJson 对象为空时,返回记录的所有字段;如果指定的字段名记录中不存在,则按用户设定的内容原样返回。如:{"name":"","age":"","addr":""}。字段值为空字符串即可,数据库只关心字段名。关于选择条件的使用,可参考。

    sort(<sort>)

    查询返回记录的字段名。

    hint(<hint>)

    查询返回记录的字段名。

    参数名参数类型描述是否必填
    hintJson 对象指定查询使用索引的情况。字段名可以为任意不重复的字符串,数据库只关心字段值。
    • 不指定:查询是否使用索引及使用哪个索引将由数据库决定;
    • 为{"":null}:查询走表扫描;
    • 为单个索引:如:{"":"myIdx"},表示查询将使用当前集合中名字为"myIdx"的索引进行;
    • 为多个索引:如:{"1":"idx1","2":"idx2","3":"idx3"}, 表示查询将使用上述三个索引之一进行。 具体使用哪一个,由数据库评估决定。

    skip(<skip>)

    查询返回记录的字段名。

    Note:

    如果不设定 skipNum 的内容或者设定 skipNum 的值为0,相当于返回所有的结果集;如果想从结果集的第3条记录开始返回,可设置 skipNum 的值等于2。

    参数名参数类型描述是否必填
    retNumint自定义返回结果集的记录条数。默认值为-1,表示返回从位置开始到结果集结束位置的所有记录。

    Note:

    如果不设定 retNum 的内容,相当于返回所有的结果集记录。如果想返回结果集的前5条记录,可设置 retNum 的值为5。

    remove()

    删除查询后的结果集。

    update(<rule>, [returnNew], [options])

    更新查询后的结果集。

    options 选项

    参数名参数类型描述默认值
    KeepShardingKeybool是否保留分区键字段。false

    返回自身,类型为 SdbQueryOption。

    错误码

    cond

    查询匹配条件的记录,即设置 cond 参数的内容。如下操作返回集合 bar 中符合条件 age 字段值大于25且 name 字段值为"Tom"的记录。

    sel

    指定返回的字段名,即设置 sel 参数的内容。如有记录{ age: 25, type: "system" }和{ age: 20, name: "Tom", type: "normal" },如下操作返回记录的age字段和name字段。

    1. > var query = new SdbQueryOption().sel( { age: "", name: "" } )
    2. > db.foo.bar.find( query )
    3. {
    4. "age": 25,
    5. "name": ""
    6. }
    7. {
    8. "age": 20,
    9. "name": "Tom"
    10. }

    返回集合 bar 中 age 字段值大于20的记录(如使用 查询),设置只返回记录的 name 和 age 字段,并按 age 字段值的升序排序。

    1. > var query = new SdbQueryOption().cond( { age: { $gt: 20 } } ).sel( { age: "", name: "" } ).sort( { age: 1 } )
    2. > db.foo.bar.find( query )

    Note:

    通过 find() 方法,我们能任意选择我们想要返回的字段名,在上例中我们选择了返回记录的 age 和 name 字段,此时用 sort() 方法时,只能对记录的 age 或 name 字段排序。而如果我们选择返回记录的所有字段,即不设置 find 方法的 sel 参数内容时,那么 sort() 能对任意字段排序。

    Note:

    因为“sex”字段并不存在于 sel() 选项 {age:"",name:""} 中,所以 sort() 指定的排序字段 {"sex":1} 将被忽略。

    hint

    使用索引 ageIndex 遍历集合 bar 下存在 age 字段的记录,并返回。

    1. > var query = new SdbQueryOption().cond( {age: {$exists:1} } ).hint( { "": "ageIndex" } )
    2. > db.foo.test.find( query )
    3. {
    4. "$oid": "5812feb6c842af52b6000007"
    5. },
    6. "age": 10
    7. }
    8. {
    9. "_id": {
    10. "$oid": "5812feb6c842af52b6000008"
    11. },
    12. "age": 20
    13. }

    skip

    选择集合 bar 下 age 字段值大于10的记录(如使用 查询),从第5条记录开始返回,即跳过前面的四条记录

    1. > var query = new SdbQueryOption().cond( { age: { $gt: 10 } } ).skip( 4 )
    2. > db.foo.bar.find( query )

    limit

    选择集合 bar 下 age 字段值大于10的记录(如使用 $gt 查询),并只返回前面2条记录。

    Note:

    如果结果集的记录数小于2,按实际的记录数返回,如果结果集的记录数大于2,则只返回前2条记录。

    update

    查询集合 bar 下 age 字段值大于10的记录,并将符合条件的记录的 age 字段加1。

    1. > var query = new SdbQueryOption().cond( { age: { $gt: 10 } } ).update( { $inc: { age: 1 } } )
    2. > db.foo.bar.find( { query )

    Note:

    1. 不能与 remove()同时使用。
    2. 与 sort()同时使用时,在单个节点上排序必须使用索引。
    3. 在集群中与 limit()或 skip()同时使用时,要保证查询条件会在单个节点或单个子表上执行。

    查询集合 bar 下 age 字段值大于10的记录,并将符合条件的记录删除。

    1. > var query = new SdbQueryOption().cond( { age: { $gt: 10 } } ).remove()
    2. > db.foo.bar.find( query )