php分页排序不变化,php – 计算已排序分页的给定记录的跳过值

我正在尝试使用php驱动程序计算mongo db集合中给定记录的跳过值.因此,获取给定记录,找出整个集合中该记录的索引.这可能吗?

目前我正在选择所有记录并手动对结果数组进行索引.

解决方法:

这称为“前向分页”,这是一种概念,可用于在使用“已排序”结果时以“向前”方向“有效地页面”结果.

包含JavaScript逻辑(因为它在shell中工作),但不难翻译.

概念一般:

{ "_id": 1, "a": 3 },

{ "_id": 2, "a": 3 },

{ "_id": 3, "a": 3 },

{ "_id": 4, "a": 2 },

{ "_id": 5, "a": 1 },

{ "_id": 6, "a": 0 }

考虑那些“已经排序”的文档(为方便起见)作为我们希望每页“两个”项目“页面”的结果示例.

在第一个例子中,你做这样的事情:

var lastVal = null,

lastSeen = [];

db.collection.find().sort({ "a": -1 }).limit(2).forEach(function(doc) {

if ( lastVal != doc.a ) {

lastSeen = [];

}

lastVal = doc.a;

lastSeen.push( doc._id );

// do something useful with each document matched

});

现在那些lastVal和lastSeen是存储在类似“会话变量”之类的东西,而不是在Web应用程序的下一个请求中可以访问,或者其他类似的东西.

它们应该包含的内容是您排序的最后一个值以及自该值未发生变化后看到的“唯一”_id值列表.因此:

lastVal = 3,

lastSeen = [1,2];

关键是当“下一页”的请求出现时,你想要将这些变量用于这样的事情:

var lastVal = 3,

lastSeen = [1,2];

db.collection.find({

"_id": { "$nin": lastSeen },

"a": { "$lte": lastVal }

}).sort({ "a": -1 }).limit(2).forEach(function(doc) {

if ( lastVal != doc.a ) {

lastSeen = [];

}

lastVal = doc.a;

lastSeen.push( doc._id );

// do something useful with each document matched

});

这样做是“排除”从结果列表中记录在lastSeen中的_id的所有值,并确保所有结果需要“小于或等于”(降序)为排序记录的lastVal字段“a”.

这将产生集合中的下两个结果:

{ "_id": 3, "a": 3 },

{ "_id": 4, "a": 2 },

但处理完我们的价值后,现在看起来像这样:

lastVal = 2,

lastSeen = [4];

所以现在的逻辑是,您不需要排除之前看到的其他_id值,因为您只是真正寻找“a”的值而不是“小于或等于”lastVal,因为只有“one”在该值处看到的_id值仅排除该值.

这当然会产生下一页使用与上面相同的代码:

{ "_id": 5, "a": 1 },

{ "_id": 6, "a": 0 }

这是通过结果“转发页面”的最有效方式,对于“排序”结果的有效分页特别有用.

但是,如果您想在任何阶段“跳转”到第20页或类似的操作,那么这不适合您.您仍然坚持使用传统的.skip()和.limit()方法来实现“页码”,因为没有其他合理的方法来“计算”这个.

所以这一切都取决于您的应用程序如何实现“分页”以及您可以使用的内容. .skip()和.limit()方法会受到“跳过”的影响,可以通过此处的方法来避免.

另一方面,如果你想“跳转到页面”,那么“跳过”是你唯一真正的选择,除非你想建立一个结果的“缓存”.但这完全是另一个问题.

标签:mongodb-php,php,mongodb,mongodb-query

来源: https://codeday.me/bug/20190918/1811210.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

caffe源码阅读(1)_整体框架和简介(摘录)

原文链接:https://www.zhihu.com/question/27982282 1.Caffe代码层次。回答里面有人说熟悉Blob,Layer,Net,Solver这样的几大类,我比较赞同。我基本是从这个顺序开始学习的,这四个类复杂性从低到高&#xff…

.net 转义包含转义的字符串

Regex.Unescape(string) 传入字符串内容(\为实体字符): "a\r\n\tb"返回字符串: "ab"

http协议 php,PHP中的HTTP协议

无状态:每次请求完成就结束连接,下一次请求与上次请求没有关系。报文:HTTP交互的信息。telnet模拟请求:// GET方式,最后回车换行Aston$ telnet 127.0.0.1 80GET /Tools/Test/http.php HTTP/1.1Host:localhost// POST方…

Mysql 查询返回结果空时间错误

数据库连接字符串中增加allow zero datetimetrue;

程序员的生存发展和出路

编程能力与编程年龄 | | 酷 壳 - CoolShellhttp://coolshell.cn/articles/10688.html 技术人员的发展之路 | | 酷 壳 - CoolShellhttp://coolshell.cn/articles/17583.html 什么是工程师文化? | | 酷 壳 - CoolShellhttp://coolshell.cn/articles/17497.html 程序员…

前端学习(2282)全选和反选问题

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">#f {font-size: 50px;font-family: 幼圆;}#fater {width: 100%;height: 100%;border: 2px solid black;}#btn {wid…

php5.3 sql server,php5.3连接sqlserver2005

操作系统win2003服务器:iisphp 5.3.26 sqlserver2005php5.3以后,已经不对sqlserver支持连接扩展了,不过微软官方还是对php5.3以后进行了扩展解决方案。1.确认要连接sqlserver的数据库版本为20052.确认php支持的vc9还是vc6,这里可以从phpinfo()里看出来。3.确认php的版本为5.…

.Net Framework 4.5 zip压缩原生支持

必须引用项目的 System.IO.Compression.FileSystem 程序集using System.IO.Compression; string startPath "c:\example\start";string zipPath "c:\example\result.zip";string extractPath "c:\example\extract";//压缩ZipFile.CreateFromD…

JavaMail--发送html邮件

//发邮件用到的两个包"org.springframework:spring-context-support:$springVersion","javax.mail:mail:1.4.7" web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee&q…

2003 64位系统 IIS6 32位模式运行

要运行 32 位版本的 ASP.NET 2.0&#xff0c;请按照以下步骤操作&#xff1a; 单击“开始”&#xff0c;单击“运行”&#xff0c;键入 cmd&#xff0c;然后单击“确定”。键入以下命令启用 32 位模式&#xff1a;cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET …

java错误switch找不到符号,Java使用StringBuilder时--找不到符号

写了个Test试了下Java的StringBuilder类代码如下&#xff1a;import java.util.Scanner;public class StringBuilder1{public static void main(String[] args){Scanner in new Scanner(System.in);System.out.println("开始用许多小段的字符串构建一个字符串&#xff1a…

sqlserver2008r2修改表不能保存的解决方法

菜单 -> Tools -> Options -> Designers -> 把“Prevent saving changes that require table re-creation” 前面复选框的勾去掉。

阿里云CentOS服务器挂载数据盘

本次使用的是centOS6.7 64位系统 第一步&#xff1a;处理阿里云磁盘挂载问题 查看磁盘情况&#xff0c;本次机器系统盘为阿里云赠送的20G&#xff0c;数据盘为100G 其中/dev/xvda为系统盘&#xff0c;/dev/xvdb为数据盘&#xff0c;数据盘暂未做任何操作&#xff0c;要使用的话…

The Closest M Points BZOJ 3053

The Closest M Points 【问题描述】 软工学院的课程很讨厌&#xff01;ZLC同志遇到了一个头疼的问题&#xff1a;在K维空间里面有许多的点&#xff0c;对于某些给定的点&#xff0c;ZLC需要找到和它最近的m个点。 &#xff08;这里的距离指的是欧几里得距离&#xff1a;D(p, q)…

vs2012 官方下载地址

http://download.microsoft.com/download/B/0/F/B0F589ED-F1B7-478C-849A-02C8395D0995/VS2012_ULT_chs.iso

php ci post 请求,CI框架中判断post,ajax,get请求的方法

这篇文章主要介绍了关于CI框架中判断post,ajax,get请求的方法 &#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下CI框架当中并没有提供&#xff0c;类似tp框架中IS_POST,IS_AJAX,IS_GET的方法。所有就得我们自己造轮子了。下面就…

InstallShield 常用常量

BATCH_INSTALL 指示当传输文件采用LOCKEDFILE或SHAREDFILE时是否锁定文件CMDLINE Setup.exe传递的命令行参数COMMONFILES Common files全路径如“c:\program file\common files”ERRORFILENAMEFOLDER_DESKTOP Windows桌面folder的路径FOLDER_PROGRAMS Windows开始菜单中 开始\程…

[position]返回顶部

position:fixed;实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>返回顶部</title> </head> <body style"margin: 0"> <div style"width: 50px;height: 50px…

InstallShield SdShowMsg未关闭导致安装程序无法停止

strMsg"hehe";SdShowMsg(strMsg,true);//显示消息 ……SdShowMsg(strMsg,false);//关闭消息SdShowMsg后要关闭窗口&#xff0c;否则安装程序会一直运行&#xff0c;点击完成之后也会在任务栏里。