社区首页 >问答首页 >如何在mongodb / mongoose查询中更改基于参数的结果位置?

如何在mongodb / mongoose查询中更改基于参数的结果位置?
EN

Stack Overflow用户
提问于 2012-01-05 02:45:29
回答 4查看 348关注 0票数 2

所以我使用mongoose和node.js来访问mongodb数据库。我想根据一个数字来提升每个结果(如果没有提升,则按创建日期排序)。例如:

代码语言:javascript
代码运行次数:0
复制
{ name: 'A',
  bump: 0 },

{ name: 'B',
  bump: 0 },

{ name: 'C',
  bump: 2 },

{ name: 'D',
  bump: 1 }

将按以下顺序检索: C,A,D,B。如何才能做到这一点(不迭代数据库中的每个条目)?

EN

回答 4

Stack Overflow用户

发布于 2012-01-13 23:42:36

试试这样的东西。存储一个跟踪线程总数的计数器,我们称它为thread_count,初始设置为0,因此在某个地方有一个类似于{thread_count:0}的文档。

每次创建新线程时,首先使用{$inc : {thread_count:1}}作为修饰符调用findAndModify() -即,将计数器递增1并返回其新值。

然后,当您插入新线程时,使用计数器的新值作为其文档中某个字段的值,我们称其为post_order

因此,每次插入的每个文档都有一个大1的值。例如,您插入的前3个文档将如下所示:

{name:'foo', post_order:1, created_at:... } // value of thread_count is at 1{name:'bar', post_order:2, created_at:... } // value of thread_count is at 2{name:'baz', post_order:3, created_at:... } // value of thread_count is at 3等。

因此,您可以有效地按post_order升序查询和排序,它将按最旧到最新的顺序返回它们(或从最新到最旧的降序)。

然后,当一个线程被提升时,为了“颠倒”它的排序顺序,您可以用{$inc:{post_order:1}}在文档上调用update()。这将使它在结果排序的顺序中前进1。如果两个线程的post_order值相同,created_at将区分哪个线程先出现。因此,您将按post_order, created_at进行排序。

你需要在post_ordercreated_at上建立一个索引。

票数 2
EN

Stack Overflow用户

发布于 2012-01-07 05:57:45

假设您的代码是变量response (一个数组),那么我将这样做:

代码语言:javascript
代码运行次数:0
复制
response.sort(function(obj1, obj2){
  return obj2.bump - obj1.bump;
});

或者,如果你还想记住名字的顺序:

代码语言:javascript
代码运行次数:0
复制
response.sort(function(obj1, obj2){
  var diff = obj2.bump - obj1.bump;
  var nameDiff = (obj2.name > obj1.name)?-1:((obj2.name < obj1.name)?1:0);
  return (diff == 0) ? nameDiff : diff;
});
票数 1
EN

Stack Overflow用户

发布于 2012-01-10 16:20:00

对于您的文档模式,我认为纯粹基于查询的解决方案是不可能的(我假设您有createdDatebump字段)。相反,我建议使用一个名为sortorder的字段来跟踪所需的检索顺序:

  1. sortorder最初是创建时间戳。如果没有“凹凸”,则按此字段排序会给出正确的顺序。
  2. 如果存在“凹凸”,则sortorder无效。因此,只需更正sortorder值:每次发生“凹凸”时,交换凹凸文档的sortorder字段和紧靠其前面的文档。这实际上会在排序顺序中“提升”文档。
  3. 查询时,按sortorder.

排序

如果字段bumpcreatedDate不在其他地方使用,则可以将其删除。

顺便说一句,大多数社交网站不会直接根据帖子的票数(或“凸起”)来操纵帖子的显示位置。取而代之的是,票数被用来计算分数。然后,根据该分数对帖子进行排序和显示。在您的例子中,您应该将createdDatebumps组合成一个可以在查询中排序的分数。

这个网站(StackOverflow.com)有一个关于如何确定“热门”问题的相关meta discussion。我认为甚至有一场比赛是为了拿出一个新的公式。元问题还分享了其他两个流行的社交新闻网站使用的公式:Y Combinator Hacker news和Reddit。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8736974

复制
相关文章
如何在Chrome浏览器中运行Selenium?
测试系统是一项艰巨的任务,您需要一个可以在此过程中为您提供帮助的工具。Selenium就是这样一种工具,主要用于网站测试。在本文中,我将告诉您如何在Chrome浏览器中运行Selenium。
用户8460142
2023/07/07
5790
如何在Chrome浏览器中运行Selenium?
quartus ii运行错误_安装quartus时弹出错误
Info: ******************************************************************* Info: Running Quartus II 64-Bit Analysis & Synthesis Info: Version 11.0 Build 157 04/27/2011 SJ Full Version Info: Processing started: Thu May 15 13:09:59 2014 Info: Command: quartus_map –read_settings_files=on –write_settings_files=off simulate -c simulate Info: Parallel compilation is enabled and will use 2 of the 2 processors detected Info: Found 1 design units, including 1 entities, in source file simulate.v Info: Found entity 1: modelsim_test Error: Top-level design entity “simulate” is undefined
全栈程序员站长
2022/11/04
5.1K0
quartus ii运行错误_安装quartus时弹出错误
selenium自动化测试时,chrome 出现“Chrome 正受到自动测试软件的控制”的解决办法
问题:使用selenium自动化测试的时候,启动浏览器出现‘Chrome正在受到自动软件的控制’的问题,修改方法有两种。
测试小兵
2019/11/20
7.5K0
Python+Selenium 自动化-指定chrome驱动运行selenium实例演示,运行指定位置下的浏览器驱动
正常情况是在根目录下放置驱动,而且改名就识别不了了,如果偶尔换个别的版本浏览器,需要重新放置个合适的浏览器驱动把之前的替换掉,很是麻烦。 通过指定驱动后面就可以实现我把很多浏览器版本的驱动都放指定位置,后面可以写个遍历驱动的方法,如果这个驱动不适用就换另一个驱动,这样就可以在频繁更换浏览器版本的情况下正常运行我们的自动化了。
小蓝枣
2020/09/24
2.1K0
Python+Selenium 自动化-指定chrome驱动运行selenium实例演示,运行指定位置下的浏览器驱动
chrome浏览器对应驱动_chrome手机浏览器
chrome浏览器驱动下载地址:http://chromedriver.storage.proxy.ustclug.org/index.html
全栈程序员站长
2022/08/03
1.3K0
chrome浏览器对应驱动_chrome手机浏览器
忘记密码时,如何查看之前Chrome浏览器保存的密码
  日常当我们忘记密码时,如何查看之前Chrome浏览器保存的密码:   进入URL: chrome://settings/passwords   将 Saved passwords 选项里面的密码状态设置为 show   即可看到在该浏览器上保存的所有账号密码,以及该账户同步的所有账号密码 ---- ----
JNingWei
2018/09/28
3.2K0
Android经常使用的五种弹出对话框[通俗易懂]
  一个Android开发中经常使用对话框的小样例,共同拥有五种对话框:普通弹出对话框,单选对话框,多选对话框,输入对话框及进度条样式对话框:
全栈程序员站长
2022/02/01
2.3K0
Google 浏览器:Chrome
很久之前就有传闻说 Google 会推出浏览器,但是一直没有实际的东西流出。但是 Google 总是以出人意外的方式推出新产品,让大家免费为他宣传,这次以漫画书的方式来个预告,展示了 Chrome 的细节,并且很快今天今天就推出 beta 版。 🙂 当然我也很快下载使用。 Google Chrome 是 Google 最新推出的一款开源浏览器,目前只有 Windows 版本,但是很快会推出 Mac 和 Linux版本。Chrome 借鉴了苹果的 WebKit(Safari 浏览器使用的引擎)、Mozilla
Denis
2023/04/14
8680
Google 浏览器:Chrome
【玩转腾讯云】购买Windows CVM时自动安装Chrome、Firefox浏览器
Server2022之前的server系统默认是IE浏览器,微软已经不再支持IE了,所以新购的服务器安装一个好用的浏览器很关键。
Windows技术交流
2022/12/20
2.4K0
asp.net弹出层实例
源代码地址:http://download.csdn.net/detail/yayun0516/8264489
全栈程序员站长
2022/07/05
1.4K0
asp.net弹出层实例
关于selenium 运行chrome时,出现错误信息 -ignore certificate errors
后面偶然看到可能和chromedriver的版本有关系,我使用的chrome的版本是65,
Mokwing
2020/09/08
1.3K0
Google发布Chrome浏览器
不过整个界面的风格和细节把握的比较好,符合G的一贯风格,其他的功能不说,单单对任务管理器的一个统计做了一个比较,分别打开IE7\FF3\Opera\Chrome,在任务管理器里查看各自的内存占用情况,每个浏览器只打开一个google的首页,看到了什么:
大江小浪
2018/07/25
6420
Google发布Chrome浏览器
chrome浏览器架构学习
在从事前端开发过程中,浏览器作为最重要的开发环境,浏览器基础是前端开发人员必须掌握的基础知识点,它贯穿着前端的整个网络体系。对浏览器原理的了解,决定着编写前端代码性能的上限。一起学习下谷歌浏览器的架构知识。 谷歌浏览器运行时的四个主要进程
薛定喵君
2019/11/05
8840
WSL运行Chrome Headless模式
Google Chrome早就支持了headless模式,但一般都是在Linux上运行,而我则习惯于在WSL上开发,折腾了好久终于找到了可以在WSL上跑headless模式的方法。
drunkdream
2020/01/02
4.5K1
WSL运行Chrome Headless模式
ride运行报错_chrome OS
http://chromedriver.storage.proxy.ustclug.org/index.html 下载地址,注意需要与chrome版本对应
全栈程序员站长
2022/11/16
5700
ride运行报错_chrome OS
Chrome浏览器模拟手机浏览器
很多网站都通过User-Agent来判断浏览器类型,如果是3G手机,显示手机页面内容,如果是普通浏览器,显示普通网页内容。谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器。 方法一: 点击左边的...
似水的流年
2020/05/26
10K0
Chrome浏览器模拟手机浏览器
窃取Chrome浏览器密码
全称Data Protection Application Programming Interface,Windows系统的一个数据保护接口,主要用于保护加密的数据,常见的应用如:
Gh0st1nTheShel
2021/11/23
1.6K0
chrome浏览器设置编码
今天写jsp文件,在chrome浏览器打开后,出现了乱码,平时在别的浏览器里,随随便便就能找到设置编码的选项,但在chrome浏览器里找了半天也没找到,以前我记得还可以设置的,无奈,只能找别的解决办法了。
秃头哥编程
2019/06/04
4K0
chrome浏览器设置编码
Python+selenium 自动化-操作已启用的chrome浏览器实例演示,chrome启用调试端口方法
首先在 chrome 快捷方式的目标后面加上这个参数。 前面是代表调试端口,可以随便用端口,后面指向一个新的文件夹用于存储用户数据。 注: 后面的参数如果不加上,端口启用好像会失败,目前没有找到原因。
小蓝枣
2020/09/24
1.6K0
Python+selenium 自动化-操作已启用的chrome浏览器实例演示,chrome启用调试端口方法
点击加载更多

相似问题

验证弹出chrome浏览器

13

当我使用浏览器运行自动测试时出错。如何运行它?

121

只有当弹出时才运行Chrome扩展脚本

13

Jenkins运行自动测试时出错

11

能用Protractor运行正常Chrome浏览器实例的匿名吗?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文