• 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一致快照

  • 相关阅读:
    切图常用快捷键
    统计网页访问量的代码
    jQuery $.each用法
    js数组去重的三种常用方法
    React中的context的用法和使用场景和发布-订阅模式
    工具函数
    前端安全
    面试题整理
    学习的一些链接
    工厂模式、构造函数模式、原型模式、构造函数模式+原型模式
  • 原文地址:https://www.cnblogs.com/cube/p/3949336.html
Copyright © 2020-2023  润新知