mongodb查询与范围中的值相反

mongodb查询与范围中的值相反,mongodb,Mongodb,我有一个mongoDB集合,里面有这样的数据 { start: "5.3", end: "8.10", owner: "guy1" } { start: "9.0", end: "14.5", owner: "guy2" } 假设我想知道谁得到了元素6.2。 我们可以看到,guy1得到了元素6.2,因为他拥有元素5.3到元素8.10 这是相反的 db.collection.find( { field: { $gt: value1, $lt:

我有一个mongoDB集合,里面有这样的数据

{
    start: "5.3",
    end: "8.10",
    owner: "guy1"
} 

{
    start: "9.0",
    end: "14.5",
    owner: "guy2"
}
假设我想知道谁得到了元素6.2。 我们可以看到,guy1得到了元素6.2,因为他拥有元素5.3到元素8.10

这是相反的

db.collection.find( { field: { $gt: value1, $lt: value2 } } );
字段指定开始和结束。提供的数据介于两个范围之间。

查找小于所需值的start最大值


如何查询

如果我理解正确,您可以使用运算符(将原始查询放入$not中),或者您知道这一点

not(x>a和x
等于
xb


您可以使用query重写它

否定逻辑,这应该可以:

db.collection.find( { start : { $lte : 6.2 }, end : { $gt : 6.2 } })
问题是您需要确保没有重叠的间隔,这可能很棘手,但这在应用程序级别是个问题。另外,请确保您没有将双精度存储为字符串,否则
$gt
/
$lt
查询将无法按预期工作,即确保您的数据如下所示:

{
  start: 9.0,
  end: 14.5,
  owner: "guy2"
}

正如Michael所指出的,您还应该确保您的区间逻辑工作正常,因为有不同的方法可以定义区间包含。数学表示法是
]
相比,但是对于浮点数的讨论变得更加复杂,其中最小ε的值有限制,这取决于数字本身的值……

或者
$gte
,或者两者都有——这取决于区间逻辑。。。例如,开始/结束相等是否意味着该特定值“包含”在间隔中?从数学上讲,半径为0的一维球体不包含任何内容,甚至连点本身也不包含,但我猜讨论超出了范围,因为OP没有提供关于这个问题的太多信息。