具有位置条件的 MongoDB 分页

2023-12-04

我想要获取按字段排序的数据。例如

db.Users.find().limit(200).sort({'rating': -1}).skip(0)

这是工作,我得到了排序的数据。并且可以使用分页。

但是,如果添加条件.find({'location':{$near : [12,32], $maxDistance: 10}})排序无法正常工作。

完整查询:

db.Users.find({'location':{$near : [12,32], $maxDistance: 10}}).limit(200).sort({'rating': -1}).skip(0)

例如

无条件位置:

offset 0

rating 100
rating 99
rating 98
rating 97
rating 96

offset 5

rating 95
rating 94
rating 93
rating 92
rating 91

偏移10

rating 90
rating 89
rating 88
rating 87
rating 86

具有标准位置

offset 0

rating 100
rating 99
rating 98
rating 97
rating 96

offset 5

rating 90
rating 89
rating 88
rating 87
rating 86

偏移10

rating 95
rating 94
rating 93
rating 92
rating 91

可能是什么问题呢?我可以在 MongoDB 中使用带有位置条件的分页吗?


聚合框架有一种方法可以使用$geoNear管道阶段。基本上,它将“投影”一个“距离”字段,然后您可以在组合排序中使用该字段:

db.collection.aggregate([
    { "$geoNear": {
        "near": [12,32],
        "distanceField": "distance",
        "maxDistance": 10
    }},
    { "$sort": { "distance": 1, "rating" -1 } }
    { "$skip": 0 },
    { "$limit": 25 }
])

应该没问题,但是“跳过”和“限制”对于大的跳过来说并不是真正有效。如果您不需要“页码编号”就可以离开并且只想继续前进,那么请尝试不同的技术。

基本原则是跟踪为页面找到的最后一个距离值以及_id该页面或前几个页面的文档值,然后可以使用$nin操作员:

db.collection.aggregate([
    { "$geoNear": {
        "near": [12,32],
        "distanceField": "distance",
        "maxDistance": 10,
        "minDistance": lastSeenDistanceValue,
        "query": { 
            "_id": { "$nin": seenIds },
            "rating": { "$lte": lastSeenRatingValue } 
        },
        "num": 25
    }},
    { "$sort": { "distance": 1, "rating": -1 }
])

从本质上讲,这会好得多,但它不会帮助您跳转到例如“第 25 页”。并非没有更多的努力来解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有位置条件的 MongoDB 分页 的相关文章

随机推荐

  • 保存 VBA 之前检查文件夹权限

    我创建了一个用户表单 它将打开一个 Excel 文件 打开并隐藏 Excel 关闭用户表单时将保存并关闭 Excel 文件 然而 Excel 文件有两种类型的用户 编辑者 将数据输入文件的人员 查看者 正在查看文件的人 包含 Excel 文
  • 使用MSBuild构建EXE时如何指定文件版本?

    我正在尝试使用 MSBuild Delphi 2010 编译 EXE 我尝试了以下方法 MSBuild exe t Clean Build p config Release ExtraDefines CodeTest property Fi
  • 查找c++执行时间

    我很好奇 C 中是否有内置函数来测量执行时间 我现在使用的是 Windows 在 Linux 中这非常简单 据我所知 Windows 上最好的方法是使用QueryPerformanceCounter and QueryPerformance
  • 我是否需要心跳来保持 TCP 连接打开?

    我有两个通过 TCP IP 进行通信的组件 组件 A 充当服务器 侦听器 组件 B 充当客户端 两人应该尽快沟通 任何时候只能有一个连接 尽管这是这个问题的一部分 我公司的一位高级开发人员表示 我需要在两个组件之间使用应用程序级心跳来确保连
  • SVN 中工作副本 XXX 已锁定且清理失败

    当我执行以下操作时出现此错误svn update 工作副本 XXXXXXXX 已锁定 请 执行 清理 命令 当我运行清理时 我得到 清理无法处理 以下路径 XXXXXXX 我该如何摆脱这个循环 一种方法是 将编辑的项目复制到另一个位置 删除
  • 为什么我需要对这个 .rds 文件使用 mode = wb 和 download.file() ?

    我被挂断了闪亮的应用程序教程第 5 课因为我无法打开counties rds file readRDS threw error reading from connection 我发现我可以打开 rds如果我下载它就好了download fi
  • 用python计算股票的平衡交易量(OBV)

    我正在用 python 做我的第一个项目 我有一个名为 df 的 pandas 数据框 有两列 close 和 volume 我想根据前两列计算 获取 OBV 列 公式如下 如果收盘价高于前一收盘价 则 当前 OBC 先前 OBC 当前交易
  • 将控制台分成两部分以获得两个输出

    我正在创建一个控制台应用程序 我希望有两个输出和一个输入 原因是一个输出始终可见 This is the first output Text flows upwards just like a regular console applica
  • c中opencv中轮廓/对象的质心?

    有没有一些更好的方法可以在 opencv 中找到轮廓的质心 而不使用内置函数 虽然 Sonaten 的答案是完全正确的 但有一个简单的方法可以做到这一点 使用专用的 opencv 函数 moments http opencv itseez
  • 使用 javascript 更改文本区域换行

    对于我的小型 wiki 应用程序 我主要需要使用文本区域来编辑内容以使用软 或虚拟 换行 但是 在某些情况下 最好不包装内容 我想我可以通过简单地使用一个按钮来关闭包装来做到这一点 这是简化的代码
  • 将自定义图标添加到 Woocommerce 购物车和结帐中的运输选项

    我想将图标添加到 Woocommerce 购物车和结账中的运输选项 例如 在 本地取货 选项中 我想在选项旁边显示一个小商店图标 如下所示 https ibb co jz0jJgk 我尝试在 Woocommerce gt 设置 gt 运输选
  • 谁创建了索引?

    是否可以检查谁在 SQL Server 上创建了索引 我只找到列出时间的脚本 select STATS DATE so object id index id StatsDate si name IndexName schema name s
  • 为 Angular 2 身份验证启用 WebAPI CORS

    我在 stackoverflow 上看到了一些答案 但我迷路了 我有 webapi 2 独立的 Angular 2 webapi项目来自模板 我唯一改变的是我添加了 CORS 并将以下行添加到 IdentityConfig cs gt Ap
  • 如何创建可在 Bootstrap 3 中缩放的响应式图像

    我目前正在使用 twitter bootstrap 3 并且在创建响应式图像时遇到问题 我用过img responsive班级 但图像尺寸并未放大 如果我使用width 100 代替max width 100 然后它就完美地工作了 哪里有问
  • ASP.NET MVC:将 ViewModel 相互嵌套,是否存在反模式?

    我有一个项目 其中 ViewModel 相互嵌套 因此它们本质上是域层次结构的字符串类型复制 例如 如果我们的域具有以下关系 组织有 1 到多个环境 环境有 1 到多台机器 那么将会有一个 OrganizationViewModel 其中包
  • Leetcode 200. 岛屿数量 TLE

    问题链接 https leetcode com problems number of islands 给定一个由 1 陆地 和 0 水 组成的二维网格图 计算岛屿的数量 岛屿四面环水 相邻陆地水平或垂直连接而成 您可以假设网格的所有四个边缘
  • R pheatmap:执行聚类并显示每个注释类别的树状图

    我知道如何使用 pheatmap 按注释类别对行 基因 进行分组 并且我知道如何对整组行 基因 执行 Person 的相关聚类 但我想要完成的是执行聚类 并显示独立的每个类别独立的树状图 这可能吗 或者我是否被迫为每个类别创建单独的热图以在
  • 4 个条件中的 2 个以上正则表达式

    我对用户密码有4个要求 至少 1 个 a z 字符 至少 1 个 A Z 字符 至少 1 个 0 9 字符 至少 1 个符号 但是 用户只需满足 4 个条件中的 2 个以上即可 密码VVVV1111 234567 AaAaAaAa or A
  • Python中的一等函数是什么

    我仍然对什么是一流函数感到困惑 如果我理解正确的话 一等函数应该使用一个函数作为对象 它是否正确 这是一流的功能吗 def this is example myarg1 return myarg1 def this is another e
  • 具有位置条件的 MongoDB 分页

    我想要获取按字段排序的数据 例如 db Users find limit 200 sort rating 1 skip 0 这是工作 我得到了排序的数据 并且可以使用分页 但是 如果添加条件 find location near 12 32