MongoDB中的游标操作

        在NoSQL数据库中游标的概念与关系型数据库差不多,主要是为了达到延长执行的效果。客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!

      直接对一个集合调用find()方法时,我们会发现,如果查询结果超过二十条,只要返回二十条的结果,这是因为Mongodb会自动递归find() 返回的游标。

/** find() 查找所有的,num 集合中有150数据 */
db.num.find()

232439_RuUE_241255.png

输入“it” 后会显示后二十条的数据。

一、游标的基本操作

    当我们使用一个变量来保存 find()的返回值时,其将不会自动进行遍历显示查询结果的操作,这时候相当于hibernate中的懒加载的形式,并没有真正的去查询数据库,只要当用到的时候(也就是遍历游标的时候)才会到数据库中将数据取出来:

/** 使用变量来保存查询结果 */
var cursor = db.num.find()

233149_ArKv_241255.png

我们需要自己对这个查询结果的游标进行遍历:

/** 遍历刚才的游标 */
cursor.forEach(function(x){print(x.var)})

233552_Nnse_241255.png

总共会显示150条结果。

二、游标中的 limit,skip,sort

    当获得游标后,我们可以先对游标进行处理后,再让访问数据库的动作按照我们的意愿发生。在这里我们可以使用limit,skip,sort三个函数来处理游标。同时这三个函数可以组成方法链式调用的形式。

limit:限制游标返回的数量,指定了上限

skip:忽略前面的部分文档,如果文档总数量小于忽略的数量,则返回空集合

sort:得到的子集合进行排序,可以按照多个键进行正反排序!

/** 查询5条 */
var cursor = db.num.find().limit(5)
cursor.forEach(function(x){print(x.var)})

/** 查询5条 并按照 var 降序排列 */
var cursor = db.num.find().limit(5).sort({"var":-1})
 cursor.forEach(function(x){print(x.var)})
 
 /** 查询10条 并按照 var 降序排列 且忽略前五行 */
 var cursor = db.num.find().limit(5).sort({"var":-1}).skip(3)
 cursor.forEach(function(x){print(x.var)})

000730_Wcnz_241255.png

在这里需要注意一点的就是,sort这个函数。当键 “var”的值是 小于0 的数字时,那么就按照该键的降序排列;当键 “var" 的值是 大于0 的数字时,那么就按照该键的升序排列。

三、相同键不同类型的值的比较顺序

    mongoDB有一个关于各种数据类型之间比较的等级制度。在某些情况下,你可能有一个key,它的值有多种类型,如果你想按照该key排序,mongoDB有一个预定义好的顺序,它们从小到大分别为:

 1. Minimum value
 2. null
 3. Numbers (integers, longs, doubles)
 4. Strings
 5. Object/document(对象/文档)
 6. Array
 7. Binary data
 8. Object ID(对象id)
 9. Boolean

 10. Date
 11. Timestamp(时间戳)
 12. Regular expression(正则表达式)
 13. Maximum value



转载于:https://my.oschina.net/bravozu/blog/194874

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值