• SdbQueryOption
    • 语法
    • 方法
      • cond(<cond>)
      • sel(<sel>)
      • sort(<sort>)
      • hint(<hint>)
      • skip(<skip>)
      • limit(<retNum>)
      • remove()
      • update(<rule>, [returnNew], [options])
        • options 选项
    • 返回值
    • 错误
    • 示例
      • cond
      • sel
      • sort
      • hint
      • skip
      • limit
      • update
      • remove

    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()]

    方法

    cond(<cond>)

    记录匹配条件。

    参数名参数类型描述是否必填
    condJson 对象为空时,查询所有记录;不为空时,查询符合条件记录。如:{"age":{"$gt":30}}。关于匹配条件的使用,可参考匹配符。

    sel(<sel>)

    查询返回记录的字段名。

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

    Note:

    • sel 参数是一个json结构,如:{字段名:字段值},字段值一般指定为空串。sel中指定的字段名在记录中存在,设置字段值不生效;不存在则返回sel中指定的字段名和字段值。
    • 记录中字段值类型为数组的,我们可以在sel中指定该字段名,用"."操作符加上双引号("")来引用数组元素。

    sort(<sort>)

    查询返回记录的字段名。

    参数名参数类型描述是否必填
    sortJson 对象指定结果集按指定字段名排序的情况。字段名的值为1或者-1,如:{"name":1,"age":-1}。1代表升序;-1代表降序。 如果不设定 sort 则表示不对结果集做排序。

    hint(<hint>)

    查询返回记录的字段名。

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

    skip(<skip>)

    查询返回记录的字段名。

    参数名参数类型描述是否必填
    skipNumint自定义从结果集哪条记录开始返回。默认值为0,表示从第一条记录开始返回。

    Note:

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

    limit(<retNum>)

    查询返回记录的字段名。

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

    Note:

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

    remove()

    删除查询后的结果集。

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

    更新查询后的结果集。

    参数名参数类型描述是否必填
    ruleJson 对象更新规则,记录按指定规则更新。
    returnNewbool是否返回更新后的记录。
    optionsJson 对象可选项,详见 options 选项说明。

    options 选项

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

    Note:

    其中 rule 参数与 update()的 rule 参数相同,options 参数与 update()的 options 参数相同。returnNew 参数默认为 false,当为 true 时,返回修改后的记录值。

    返回值

    返回自身,类型为 SdbQueryOption。

    错误

    错误码

    示例

    cond

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

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

    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. }

    sort

    返回集合 bar 中 age 字段值大于20的记录(如使用 $gt 查询),设置只返回记录的 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() 能对任意字段排序。

    指定一个无效的排序字段。

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

    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. "_id": {
    5. "$oid": "5812feb6c842af52b6000007"
    6. },
    7. "age": 10
    8. }
    9. {
    10. "_id": {
    11. "$oid": "5812feb6c842af52b6000008"
    12. },
    13. "age": 20
    14. }

    skip

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

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

    Note:

    如果结果集的记录数小于5,那么无记录返回;如果结果集的记录数大于5,则从第5条开始返回。

    limit

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

    1. > var query = new SdbQueryOption().cond( { age: { $gt: 10 } } ).limit( 2 )
    2. > db.foo.bar.find( query )
    3. {
    4. "_id": {
    5. "$oid": "5813035cc842af52b6000009"
    6. },
    7. "name": "Tom",
    8. "age": 11
    9. }
    10. {
    11. "_id": {
    12. "$oid": "58130372c842af52b600000a"
    13. },
    14. "name": "Jack",
    15. "age": 12
    16. }

    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()同时使用时,要保证查询条件会在单个节点或单个子表上执行。

    remove

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

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

    Note:

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