我有一个包含这样的数据的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的最大值,该值小于所需值。
如何查询?
答案 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)