【问题标题】:using $nearSphere + limit in a mongodb find query在 mongodb 查找查询中使用 $nearSphere + limit
【发布时间】:2018-05-04 00:21:15
【问题描述】:

我使用$nearSphere 创建了一个查询,我意识到我有时会获得巨大数量的结果 (1000+),这会影响我的应用程序的性能。

我尝试使用.limit(),但它似乎被查询忽略了。 我也尝试使用batch_size(),它似乎根本不影响返回结果的数量。

是否有任何技巧或方法来限制返回的结果? 我考虑过使用迭代器执行,这就是我所拥有的,它似乎对性能不太好:

for r in xrange(0,limit):
        print res.next()

查询本身非常简单:

query = {"location": {
    "$nearSphere": {"$geometry": {"type": "Point", "coordinates"
     [geo['lat'], geo['lng']]}, "$maxDistance": 500}}}


coll.find(query).limit(4).batch_size(4)

我在 Azure Cosmos-db 上使用 Mongodb API

【问题讨论】:

    标签: mongodb mongodb-query pymongo azure-cosmosdb pymongo-2.x


    【解决方案1】:

    我无法重现这个问题。限制工作得很好。尝试使用来自https://aka.ms/mongodb-feature-support 的示例文档(在同一集合中制作几个副本)和来自文档的查询并将 .limit(1) 附加到它以查看正确的行为:

    db.volcanos.find({ "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", 坐标: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }).limit(1)

    【讨论】:

    • 很奇怪,我使用几乎相同的查询,我可以看到限制被忽略。我的 db 上的 location 属性如下所示:` "location": { "type": "Point", "coordinates": [ 34.780659466136484, 32.08260571073972 ] }` 也许是格式问题?
    • 这也可能与我的查询是在“location”而不是“location.coordinates”这一事实有关?我在“location.coordinates”上得到 0 个结果
    • 玩弄 minDistance 和 maxDistance 值 - 您可能不会与他们定义的形状重叠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    相关资源
    最近更新 更多