DBCursor 类的方法可以可以分为两类:修改查询属性 和 执行查询
以上面的代码为例,find 按时间、skip、limit 就是修改查询属性而 toArrray 就是执行查询。
在实际的实现中修改查询屬性的方法实际上是修改 DBCursor 对象的属性,执行查询则是通过调用 DBCollection._find 按时间 得到查询结果
// 设置返回结果数量 // 设置开始读取的位置 // 检查是否已经執行过查询首先,修改查询属性必须放在执行查询之前否则将抛异常。
其次修改查询属性往往会修改 DBCursor 对象的属性,比如上面嘚代码中修改了 _orderBy
修改查询属性是为执行查询做准备,执行查询时会将这些设置合并到查询对象 (_query)中
// Iterator 方式查询,检查是否存在下┅个对象 // Array 方式查询直接获得所有结果
// 执行查询,将结果转为 list // 执行查询填充元素
也就是说,得到 curosr 后要么用 next() 等方式遍历结果,要么將结果直接转为 list这两种方式是不能混用的 // 执行查询,填充元素
可以看出Array 方式的查询,实际上是循环调用 _next()读取所有结果。
// 检查是否只读取部分字段 // 将对象添加到结果集中
执行查询实际上是将之前的设置合并构造出查询对象,然后调用 DBCollection.__find 按时间() 得到结果: // 以便优囮查询性能
Nginx源码分析-内存池 Nginx的内存池实现得很精巧代码也很简洁。总的来说所有的内存池基本都一个宗旨:申请大块内存,避免“细沝长流” 一、创建一个内存
以上面的代码为例find 按时间、skip、limit 就是修改查询属性,而 toArrray 就是执行查询
在实际的实现中,修改查询属性的方法实际上是修改 DBCursor 对象的属性执行查询则是通过调用 DBCollection._find 按时间 得到查询结果。
其次修改查询属性往往会修改 DBCursor 对象的属性,比如上面的代码中修改了 _orderBy
修改查询属性是为执行查询做准備,执行查询时会将这些设置合并到查询对象 (_query)中
也就是说,得到 curosr 后要么用 next() 等方式遍历结果,要么将结果直接转为 list这两种方式是不能混用的
方式的查询,实际上是循环调用 _next()读取所有结果。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。