MongoDB:如何获取包含最接近给定数字的数值的文档

Posted

技术标签:

【中文标题】MongoDB:如何获取包含最接近给定数字的数值的文档【英文标题】:MongoDB: How to get the document that contains the numeric value closest to a given number 【发布时间】:2015-10-01 06:24:42 【问题描述】:

鉴于以下 MongoDB 文档...

 "_id" : ObjectId("55e67b28010000880ca4c043"), "amount" :  "value" : 1.125, "currency" : "USD"  
 "_id" : ObjectId("55e897e60100009f0051da48"), "amount" :  "value" : 1.525, "currency" : "USD"  
 "_id" : ObjectId("55ea1b520100006d004e602a"), "amount" :  "value" : 1.825, "currency" : "USD"  

如何获取最接近 2.0(在本例中为 1.825)的 amount.value 的文档?例如,我需要创建一个以数字为输入的查询,并返回最接近指定数字的amount.value 文档。

【问题讨论】:

如果你有值 2.1 你想返回什么? 还是 1.825... 我需要找到最接近的数字,不管给定的数字是小还是大。 您是否可以灵活地将值更改为“值”:[1.125,0]? 这有点困难,因为这样的改变会影响很多代码......第二个数字是什么? MongoDB 支持地理定位索引,它将支持 $near,但如果您不习惯可以使用下面 Nishant 给出的 ans 【参考方案1】:

您可以在两个查询中完成它。

providedValue = 1.34;

closestBelow = db.test.find(
    "amount.value": 
    $lte: providedValue
    
).sort(
    amount.value: -1
).limit(1);

closestAbove = db.test.find(
    "amount.value": 
    $gte: providedValue
    
).sort(
    amount.value: 1
).limit(1);

您可以查看此链接以获取更多详细信息 mongodb - Find document with closest integer value

【讨论】:

我正在考虑这是否可以通过使用聚合或某事物创建的链表来实现。将在运行时保存查询...

以上是关于MongoDB:如何获取包含最接近给定数字的数值的文档的主要内容,如果未能解决你的问题,请参考以下文章

获取列表中某个给定数字的3个最接近的值?

JAVA寻找任意元素之和最接近指定数值的程序

当我从参数接收到 Iterable 时,如何使用带有 java8 的 Lamba 表达式从给定值中找到最接近的数字? [复制]

在熊猫中获取与给定日期时间最接近的时间戳的行的有效方法

在数组中查找三个元素之和最接近给定数字

返回数据框中最接近用户定义数字的行