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