mongodb查询范围内的值相反

时间:2015-04-13 10:15:17

标签: 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: value2 } } );

字段指定开始和结束。提供的数据介于范围之间。

查找start的最大值,该值小于所需值。

如何查询?

2 个答案:

答案 0 :(得分:3)

否定逻辑,这应该有效:

db.collection.find( { start : { $lte : 6.2 }, end : { $gt : 6.2 } })

问题是您需要确保没有重叠间隔,这可能很棘手,但这在应用程序级别是一个问题。此外,请确保您不会将双打存储为字符串,否则$gt / $lt查询将无法按预期工作,即确保您的数据看起来像这样:

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

正如迈克尔指出的那样,你还应该确保你的区间逻辑成功,因为有不同的方法可以定义区间包含。数学符号是)],但是浮点数的讨论变得更加复杂,其中最小ε的值有限制,这取决于数字本身的值... < / p>

答案 1 :(得分:0)

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

not (x > a and x < b)等于x < a or x > b

您可以使用$or查询

重写它