【问题标题】:Find the nearest even number to passed one in MongoDB在MongoDB中找到最接近的偶数通过一个
【发布时间】:2013-06-16 00:12:12
【问题描述】:

我在 Linux 下运行 MongoDB 2.4.4-pre-。我有一个包含元素的表,每个元素都有一个名为“num”的字段。该字段包含一个正整数。我的查询看起来像什么来查找元素,其中“num”字段包含最接近该数字的偶数,我想检查?

【问题讨论】:

  • 什么范围会被认为是附近?
  • 无范围。我只需要找到最近的。
  • 您的问题中可能需要一些更详细的信息:集合中有多少文档?多久执行一次查询?收藏是否经常更换? num 字段是否已编入索引?您能否更改架构以包含 num 是否为偶数(例如添加 isEven)?

标签: mongodb performance query-performance nosql


【解决方案1】:

链接的related question 描述了两种查找“最近”值的方法。一种是运行两个查询:查找高于给定数字的最近值,以及查找最近的较低值。另一种方法是使用地理空间索引(这需要更改您的架构)。

如果您不介意两个查询,那么您需要对查询进行的唯一修改是添加一个您只想考虑偶数的约束:

  db.collection.find ( { "num" : { "$mod" : [ 2, 0 ] } } )

是一种仅查询偶数的方法(请参阅$mod operator docs)。

然后你的两个查询变成:

a=db.collection.find({"num":{"$mod":[2,0], $gte:INPUTNUM }}).sort({"num":1}).limit(-1)
b=db.collection.find({"num":{"$mod":[2,0], $lte:INPUTNUM }}).sort({"num":-1}).limit(-1)

你从 a 中保留的地方,b 是最接近 INPUTNUM 的地方。

【讨论】:

  • 只有知道一些关于nums的范围等附加信息的情况下才能优化。
猜你喜欢
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多