MongoDb 近/geonear 可变距离查询

2024-01-06

我想执行一个查询,其中距离是集合中的动态字段。

集合中的条目示例:

{
  name:'myName',
  location: {lat:10, lng:20},
  maximumDistance: 10
}
{
  name:'myName2',
  location: {lat:20, lng:20},
  maximumDistance: 100
}

我的目标是从该集合中检索所有元素location接近给定位置,假设 (10,10) 但计算出的距离小于此最大距离 field.

我可以在近查询中将 maxDistance 设置为一个常量值(足够高以检索我想要的所有元素),然后在我的 java 代码中执行过滤器,但我更喜欢在查询上执行此操作,它可能太面向 SQL。


您将无法使用普通查询来执行此操作,因为您无法动态设置每个文档的距离。从 MongoDB 2.4 开始,您可以使用聚合框架来执行此操作,因为他们已将 geoNear 运算符添加到管道的开头。

第一个阶段是 geoNear,它与 geonear 命令非常相似。我们还将获得从指定点 (10,10) 到文档的距离作为结果。

第二阶段,我们需要使用项目运算符来添加 maxDistance 字段和计算的 geoNear 距离之间的差异。

最后,我们匹配那些具有正增量((最大 - 距离)> 0)的文档。

这是使用的管道异步Java驱动程序 http://www.allanbank.com/mongodb-async-driver/的辅助类。

package example;

import static com.allanbank.mongodb.builder.AggregationProjectFields.include;
import static com.allanbank.mongodb.builder.QueryBuilder.where;
import static com.allanbank.mongodb.builder.expression.Expressions.field;
import static com.allanbank.mongodb.builder.expression.Expressions.set;
import static com.allanbank.mongodb.builder.expression.Expressions.subtract;

import com.allanbank.mongodb.bson.element.ArrayElement;
import com.allanbank.mongodb.builder.Aggregate;
import com.allanbank.mongodb.builder.AggregationGeoNear;
import com.allanbank.mongodb.builder.GeoJson;

public class AggregateGeoNear {
    public static void main(String[] args) {
        Aggregate aggregate = Aggregate
                .builder()
                .geoNear(
                        AggregationGeoNear.builder()
                                .location(GeoJson.p(10, 10))
                                .distanceField("distance"))
                .project(
                        include("name", "location", "maximumDistance"),
                        set("delta",
                                subtract(field("maximumDistance"),
                                        field("distance"))))
                .match(where("delta").greaterThanOrEqualTo(0)).build();

        System.out
                .println(new ArrayElement("pipeline", aggregate.getPipeline()));
    }
}

这是创建的管道:

pipeline : [
  {
    '$geoNear' : {
      near : [
        10, 
        10
      ],
      distanceField : 'distance',
      spherical : false,
      uniqueDocs : true
    }
  }, 
  {
    '$project' : {
      name : 1,
      location : 1,
      maximumDistance : 1,
      delta : {
        '$subtract' : [
          '$maximumDistance', 
          '$distance'
        ]
      }
    }
  }, 
  {
    '$match' : {
      delta : { '$gte' : 0 }
    }
  }
]

HTH - 罗布。

附:上述构建器使用的是驱动程序 1.2.0 版本的预发行版。当我输入代码时,代码将通过构建矩阵,并应在 2013 年 3 月 22 日星期五之前发布。

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

MongoDb 近/geonear 可变距离查询 的相关文章

  • Google Geolocation API - 使用经度和纬度获取文本框中的地址?

    我注意到很多关于如何使用基于 IP 地址的 Google 地理定位查找您的位置的信息 但我想知道是否以及如何使用此服务来输入位置 经度和纬度 并获取当前地址 或至少是一个城市 州 我想用 C 来完成此操作 但我可以使用任何语言 有什么建议吗
  • 查找附近应用程序的用户(iPhone 和 Android)

    我正在开发一个有 iPhone 版本和 Android 版本的应用程序 我的目标是 显示我的应用程序的附近用户列表 iPhone 应用程序用户和 Android 应用程序用户 假设列出当前在 1 英里或 2 英里半径内并且当前正在使用我的应
  • 如何更改 MongoDB 用户权限?

    例如 如果我有这个用户 gt db system users find user testAdmin pwd some hash roles clusterAdmin otherDBRoles TestDB readWrite 我想给那个用
  • 如何将纬度和经度转换为位置名称[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何使用 Java 中的 API 从
  • 无法连接到服务器 127.0.0.1:27017 连接尝试失败 MongoDB

    我正在使用 Ubuntu 操作系统 16 04 我正在使用命令启动 mongodb sudo service mongod start进而mongo 它为我生成了这个错误 MongoDB shell version v4 0 1 conne
  • 如何验证 ObjectID

    使用 Joi 模式验证 是否可以针对 MongoDB ObjectID 进行验证 像这样的事情可能很棒 id Joi ObjectId required error errorParser 我发现如果我这样做 Joi object id J
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • MongoDB自增ID

    MongodB 中自动生成的 ID 的大小为12 Bytes大整数的大小是8 bytes 我在 4 台运行 Ubuntu Server 的机器上有一个 mongodb 集群 但我现在只是在测试 插入只能通过一台服务器 即 Nodejs 服务
  • 获取 2 个字母的州/省缩写

    因此 我使用 GeoNames API 获取国家 地区和州 省信息 并使用这些信息填充表单中的选择下拉列表 此表单将其信息提交给 SOAP Web 服务 并且 SOAP 服务器仅理解 2 个字母形式的国家 地区和州 省数据 IE CA 代表
  • 在 MongoDB 聚合的“addField”操作中使用“$count”

    我正在尝试找到聚合运算符的正确组合 以将标题为 totalCount 的字段添加到我的 mongoDB 视图中 这将为我提供聚合管道特定阶段的计数 并将其输出为每个文档的计数结果 count count 但最终我得到了一个具有此结果的文档
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 将域类从 GORM 独立模块导入到 Grails 中

    我有两块拼图 1 一个名为的无 Grails 项目core module使用独立的 GORM dependencies compile org grails grails datastore gorm mongodb 6 0 4 RELEA
  • 使用 PHP 从 Mongo 解码 JSON

    我已经看过这个线程 PHP 解码嵌套 JSON https stackoverflow com questions 3555335 php decode nested json并没有设法用它来解决我的问题 我目前正在从 Mongo 获取 J
  • Mongodb MapReduce 选择最新日期

    我似乎无法让我的 MapReduce 缩减功能正常工作 这是我的地图功能 function Map day Date UTC this TimeStamp getFullYear this TimeStamp getMonth this T
  • 如何在java中使用$lookup阶段与spring data mongodb? [复制]

    这个问题在这里已经有答案了 到 Spring 的最新版本 我已经看到很多堆栈溢出问题 这表明 spring data mongodb 中不支持此操作新的 spring data mongodb 1 10 0 中是否支持此操作 db orde
  • 匹配包含 MongoDB 中提供的数组的任意组合的数组字段

    我想使用指定的数组元素列表进行查询 以便返回的文档只能包含我传递的元素 但不需要包含所有元素 鉴于以下文件 name Article 1 tags Funny Rad name Article 2 tags Cool Rad name Ar
  • 如何停止在 mongodb 集合中插入重复文档

    让我们有一个MongoDB包含三个文档的集合 db collection find id user A title Physics Bank Bank A id user A title Chemistry Bank Bank B id u
  • 在这种情况下如何填充 Mongoose?

    const userSchema new mongoose Schema email type String unique true password String notifications notifiId type Schema Ty
  • Mongoose - 查询从多个集合中获取数据

    我想要获取猫鼬的查询在 Node js 应用程序中 如下所述输出 user js comment js 和 post js 是我使用的模型文件 user js var mongoose require mongoose var Schema
  • 无法制作带有身份验证的基本 mongo shell 脚本

    我有一个非常复杂的问题 我认为我可以通过编写 mongo shell 脚本来解决 但我什至无法建立一个简单的连接 我有一个本地 mongo 数据库 它需要一个用户名 密码 我通常这样访问 mongo admin u

随机推荐

  • MATLAB:比较三个数组中的所有元素

    我有三个一维数组 其中元素是一些值 我想将一个数组中的每个元素与其他两个数组中的所有元素进行比较 例如 a 2 4 6 8 12 b 1 3 5 9 10 c 3 5 8 11 15 我想知道不同数组中是否有相同的值 在本例中有 3 5 8
  • Crashlytics 不适用于 Xcode 10 beta

    我使用 Firestore 和 Google 提供的一些子服务 Crashlytics 就是其中之一 我最近开始使用 Xcode 10 beta 并且开始收到此错误 Users
  • Python 剥离方法

    今天在 python 终端中 我尝试了 a serviceCheck postmaster a strip serviceCheck 但不是得到 postmaster 我有 postmast 什么可能导致这种情况 我怎样才能得到 postm
  • 类型 Any 没有下标成员 json Swift 3

    我有这个代码 let subjectAbbreviation JSON data subject abbr as String Swift 3 抱怨 Any 类型没有下标成员 我该如何解开这个 我知道我可以使用 JSON as AnyObj
  • 如何关闭多个彼此独立的div。 javascript

    我构建了一排 4 个按钮来打开 4 个 div 一次打开一个 用户可以通过单击这些按钮在 4 个 div 之间切换 但是 用户必须能够再次关闭该 div 并且彼此独立 这意味着如果用户单击这些按钮之一 他必须能够仅使用一个 关闭按钮 再次关
  • 尝试同步调用 Async 方法。它永远等待 Task.Result [重复]

    这个问题在这里已经有答案了 因此 我正在编写一个应用程序 我想在其中公开一系列具有同步和异步等效方法的方法 为此 我认为最简单的方法是在 asnyc 方法中编写逻辑 并编写同步方法作为异步方法的包装器 同步等待它们传递结果 代码没有发挥作用
  • 无论如何可以使用成员函数作为默认参数吗?

    它尝试了类似的方法 但行不通 有没有办法获得类似的效果 class A public int foo void bar int b foo 是的 重载该函数并调用其中的成员函数 void bar bar foo
  • c++11 lambda 是否捕获它们不使用的变量?

    当我使用 表示我希望通过 lambda 中的值捕获所有局部变量 这会导致all正在复制的函数中的局部变量 或仅复制所有局部变量lambda 使用的 因此 例如 如果我有 vector
  • Range Key 组合键查询

    目前我有一个包含以下字段的集合 userId otherUserId date status 对于我的 Dynamo 集合 我使用 userId 作为hashKey并为rangeKey我想使用日期 otherUserId 通过这样做 我可以
  • Bootstrap selectpicker 在克隆的 div 中刷新后重复

    我有一个引导选择器 div div class hidden div div
  • tf.train.get_global_step() 在 TensorFlow 中做什么?

    函数有什么用tf train get global step 在 TensorFlow 中 在机器学习概念中它相当于什么 当训练过程因某种原因停止时 您可以使用它从上次中断的地方重新开始训练 当然 您随时可以在不知道情况的情况下重新开始训练
  • PHP - 检查两个数组是否相等

    我想检查两个数组是否相等 我的意思是 相同的大小 相同的索引 相同的值 我怎样才能做到这一点 Using 根据用户的建议 我希望打印以下内容enter如果数组中至少有一个元素不同 但事实上并非如此 if POST atlOriginal o
  • Delphi 通用 TInterfaceList 可能吗?

    在Delphi 2010中 我定义了一个通用的TInterfaceList 如下所示 type TInterfaceList
  • ActiveAdmin 如何添加没有模型的自定义控制器[重复]

    这个问题在这里已经有答案了 可能的重复 将页面添加到活动管理 https stackoverflow com questions 7639978 add page to active admin 我目前正在寻找一种解决方案 用于将没有模型的
  • Microsoft .NET 4.0 完整框架和客户端配置文件之间的差异

    Microsoft NET Framework 4 0 完整安装程序 32 位和 64 位 为 48 1 MB 客户端配置文件安装程序为 41 0 MB 提取的安装文件分别为 237 MB 和 194 MB 安装后分别为 537 MB 和
  • D3.js - 是否可以在力导向图和节点链接树之间制作动画?

    我正在使用D3 js库并查看力导向图演示 http mbostock github com d3 ex force html http mbostock github com d3 ex force html 我也在查看节点链接树 http
  • 如何在 sitecore 中确定给定项目是否为起始项目?

    在配置文件中 我们为元素中的每个网站设置启动项 例如 startItem Home 我们还可以在代码中选择启动项 但我想问的是如何确定任何选定的项目是否是起始项目 至少我们可以选择开始项目并与给定项目进行比较 但我认为这不是优雅的代码 我们
  • SendMessage消息号的解释?

    我已经成功地使用 Windows SendMessage 方法来帮助我在文本编辑器中执行各种操作 但每次我只是复制和粘贴其他人建议的代码 而且我并不真正知道它的含义 总是有一个神秘的消息号作为参数 我如何知道这些代码的含义 以便我能够真正理
  • 需要电子邮件地址域 jQuery 验证 [重复]

    这个问题在这里已经有答案了 我正在使用以下代码 与jQuery 验证插件 http jqueryvalidation org 验证电子邮件地址 schedule tour form validate rules Email required
  • MongoDb 近/geonear 可变距离查询

    我想执行一个查询 其中距离是集合中的动态字段 集合中的条目示例 name myName location lat 10 lng 20 maximumDistance 10 name myName2 location lat 20 lng 2