zoukankan      html  css  js  c++  java
  • MongoDB 使用Limit和Skip完成分页 和游标(二)

    //$slice操作符返回文档中指定数组的内部值
    //查询出Jim书架中第2~4本书
    
    db.persons.find({name:"jim"},{books:{"$slice":[1,3]}})
    
    
    //查询出最后一本书
    
    db.persons.find({name:"jim"},{books:{"$slice":-1},_id:0,name:1})
    
    
    //查询出在K上过学的学生
    //这个我们用绝对匹配可以完成,但是有些问题(找找问题?顺序?总要带着score?)
    db.persons.find({school:{school:"K",score:"A"}},{_id:0,school:1})
    
    //为了解决顺序的问题我可以用对象”.”的方式定位
    db.persons.find({"school.score":"A","school.school":"K"},{_id:0,school:1})
    
    
    
    //db.persons.find({"school.score":"A","school.school":”J”},{_id:0,school:1})
    
    //正确做法单条条件组查询$elemMatch
    db.persons.find({school:{$elemMatch:{school:"K",score:"A"}}})
    
    
    
    分页和排序
    1.Limit返回指定的数据条数
    1.1查询出persons文档中前5条数据
    db.persons.find({},{_id:0,name:1}).limit(5)
    2.Skip返回指定数据的跨度
    2.1查询出persons文档中5~10条的数据
    db.persons.find({},{_id:0,name:1}).limit(5).skip(5)
    3.Sort返回按照年龄排序的数据[1,-1]
    db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})
    注意:mongodb的key可以存不同类型的数据排序就也有优先级
    
    
    
    mongodb的key可以存不同类型的数据排序就也有优先级
    最小值
    null
    数字
    字符串
    对象/文档
    数组
    二进制
    对象ID
    布尔
    日期
    
    
    
    游标
    利用游标遍历查询数据
    var persons = db.persons.find();
    while(persons.hasNext()){
    obj = persons.next();
    print(obj.name)
    }
    
    
    游标几个销毁条件
    1.客户端发来信息叫他销毁
    2.游标迭代完毕
    3.默认游标超过10分钟没用也会别清除
    3.查询快照
    
    
    查询快照
    db.persons.find({$query:{name:"Jim"},$snapshot:true})
    

      

    二、分页和排序
    1.Limit返回指定的数据条数
    1.1查询出persons文档中前5条数据
    db.persons.find({},{_id:0,name:1}).limit(5)
    2.Skip返回指定数据的跨度
    2.1查询出persons文档中5~10条的数据
    db.persons.find({},{_id:0,name:1}).limit(5).skip(5)
    3.Sort返回按照年龄排序的数据[1,-1]
    db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})
    注意:mongodb的key可以存不同类型的数据排序就也有优先级
    最小值
    null
    数字
    字符串
    对象/文档
    数组
    二进制
    对象ID
    布尔
    日期
    时间戳à正则 à最大值
    4.Limit和Skip完成分页
    4.1三条数据位一页进行分页
    第一页àdb.persons.find({},{_id:0,name:1}).limit(3).skip(0)
    第二页àdb.persons.find({},{_id:0,name:1}).limit(3).skip(3)
    4.2skip有性能问题,没有特殊情况下我们也可以换个思路
    对文档进行重新解构设计

    每次查询操作的时候前后台传值全要把上次的最后一个文档的日期保存下来
    db.persons.find({date:{$gt:日期数值}}).limit(3)
    个人建议à应该把软件的中点放到便捷和精确查询上而不是分页的性能上
    因为用户最多不会翻查过2页的
    三、游标
    利用游标遍历查询数据
    var persons = db.persons.find();
    while(persons.hasNext()){
    obj = persons.next();
    print(obj.name)
    }

    2.游标几个销毁条件
    1.客户端发来信息叫他销毁
    2.游标迭代完毕
    3.默认游标超过10分钟没用也会别清除
    3.查询快照
    快照后就会针对不变的集合进行游标运动了,看看使用方法.
    db.persons.find({$query:{name:”Jim”},$snapshot:true})
    高级查询选项
    $query
    $orderby
    $maxsan:integer最多扫描的文档数
    $min:doc 查询开始
    $max:doc 查询结束
    $hint:doc 使用哪个索引
    $explain:boolean 统计
    $snapshot:boolean一致快照

  • 相关阅读:
    Python基础四
    Python基础三
    Python基础二
    Python基础一
    JAVA测试
    国庆随笔
    ATM-JAVA程序 //程序有5处相同错误,找不出原因 转账功能没有实现,修改密码来不及实现了
    JAVA程序测试感受
    第八周
    第七周
  • 原文地址:https://www.cnblogs.com/cube/p/3949336.html
Copyright © 2011-2022 走看看