查询

    find() 方法是查询集合中记录的主要方法

    如果没有任何参数,则返回集合中所有的记录。以下示例为返回集合空间 foo 中集合 bar 的所有记录:

    现集合中有如下一条记录:

    1. {
    2. "_id": 1,
    3. "name":
    4. {
    5. "first": "Tom",
    6. "second": "David"
    7. },
    8. "age": 23
    9. "birth": "1990-04-01",
    10. "phone":
    11. [
    12. 10086,
    13. 10010,
    14. ],
    15. "family":
    16. [
    17. {
    18. "Dad": "Kobe",
    19. "phone": 139123456
    20. },
    21. {
    22. "Mom": "Julie",
    23. "phone": 189123456
    24. }
    25. ]
    26. }
    • Equality 匹配

    下面的操作返回集合 bar 中 age 等于23的记录

    1. > db.foo.bar.find( { age: 23 } )
    • 使用

    下面操作返回集合 bar 中 age 字段值大于20的记录

    1. > db.foo.bar.find( { age: { $gt: 20 } } )
    • 嵌套数组匹配

      2.数组元素为 BSON 对象的查询,下面的操作返回集合 bar 中 family 字段包含的子元素 Dad 字段值为“Kobe”,phone字段值为139123456的记录:

      • 嵌套 BSON 对象匹配查询

      下面的操作返回一个游标指向集合 bar 中嵌套 BSON 对象的 name 字段匹配{ "first": "Tom" }的记录

      1. > db.foo.bar.find( { "name": { "$elemMatch": { "first": "Tom" } } } )

      上面还可以写成:

      1. > db.foo.bar.find( { "name.first": "Tom" } )

      如果指定 find 方法的 sel 参数,那么只返回指定的 sel 参数内的字段名。下面的操作返回记录的 name 字段:

      1. > db.foo.bar.find( {}, { name: "" } )

      Note:

      如果记录中不存在指定的字段名(如:people),SequoiaDB 默认也返回。如:

      1. > db.foo.bar.find( {}, { name: "", people: "" } ){ "name": { "fist": "Tom", "second": "David" }, "people": ""}
      • cursor.sort( )

      sort()方法用来按指定的字段排序,语法格式为:sort( { 字段名1: 1|-1, 字段名2: 1|-1, …} ),1为升序,-1为降序。如:

      • cursor.hint( )

      添加索引加快查找速度,假设存在名为“testIndex”的索引:

      1. > db.foo.bar.find().hint( { "": "testIndex" } )
      • cursor.limit( )

      在结果集中限制返回的记录条数:

      1. > db.foo.bar.find().limit( 3 )

      返回结果集里面的的前三条记录

      • cursor.skip( )

      skip() 方法控制结果集的开始点,即跳过前面的 num 条记录,从num+1条记录开始返回:

      1. > db.foo.bar.find().skip( 5 )

      从查询的结果集的第6条记录开始返回

      • 使用游标控制 find() 返回的记录
      1. db.foo.bar.find().current() //返回当前游标指向的记录
      2. db.foo.bar.find().next() //返回当前游标指向的下一条记录
      3. db.foo.bar.find().close() //关闭当前游标,当前游标不再可用
      4. db.foo.bar.find().count() //返回当前游标的记录总数
      5. db.foo.bar.find().size() //返回当前游标到最终游标的距离