MongoDB IP地址BETWEEN查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB IP地址BETWEEN查询相关的知识,希望对你有一定的参考价值。

我正在寻找相当于这个SQL查询的mongo:

SELECT country
FROM geoip
WHERE
2921648058 BETWEEN start AND end

我的MongoDB文档如下所示:

{
        "_id" : ObjectId("52daefed0c78fc8c9085498d"),
        "country" : "DE",
        "end" : "16777471",
        "start" : "16777216"
}

这些数字是转换为int格式的IP地址。不幸的是,关于这一点的所有搜索只出现了$ gt和$ lt运算符,在这种情况下没有多大用处,因为我不想检索范围内某个字段的文档,但文档中的范围很大如果文档本身符合搜索中给定的数字。 由于数据库的庞大规模,浏览所有记录并在脚本中评估结果不是一种选择。

答案

$gte$lte运营商确实在这里适用;你只需要为startend使用单独的运算符:

ip = 2921648058;
db.geoip.find({'start': {'$lte': ip}, 'end': {'$gte': ip}})

以上是关于MongoDB IP地址BETWEEN查询的主要内容,如果未能解决你的问题,请参考以下文章

使用“BETWEEN”检索字段时出错

MySQL BETWEEN 查询不使用索引

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

[工作积累] UE4 并行渲染的同步 - Sync between FParallelCommandListSet & FRHICommandListImmediate calls(代码片段

具有稀疏复合索引的 MongoDB $near 地理空间查询错误 13311

具有稀疏复合索引的 MongoDB $near 地理空间查询错误 13311