$ geo几乎没有来自接近坐标的结果

时间:2019-03-01 19:54:22

标签: mongodb

在MongoDB中汇总结果时,我有一个非常奇怪的行为。例如,如果我查询以下内容:

db.getCollection('locations').aggregate([
{"$geoNear": {
    "spherical": true,
    "maxDistance": 14239,
    "near": {
        "type": "Point",
        "coordinates": [45.180584858570136,5.760955810546876]
    },
    "distanceField": "distance"
}},
{"$match": {
    "datetime": {
        "$gte": ISODate("2019-03-01T00:00:00Z"),
        "$lt": ISODate("2019-03-02T00:00:00Z")
    }
}}
])

我没有结果。但是,如果我将坐标更改为[45.180584858570136,5.7602691650390625],它与第一个点相距53.82米,则会得到16个结果:

{
    "_id" : ObjectId("5c791c276bc27675f3bd2d7f"),
    "user" : ObjectId("5c4620c96bc27618b1a39cfe"),
    "coordinates" : {
        "type" : "Point",
        "coordinates" : [ 
            45.1837952, 
            5.7204736
        ]
    },
    "datetime" : ISODate("2019-03-01T11:37:04.000Z"),
    "_updated" : ISODate("2019-03-01T11:48:55.000Z"),
    "_created" : ISODate("2019-03-01T11:48:55.000Z"),
    "_etag" : "535e09d3d25f0b970fef8e45f220e41a99fd11f6",
    "distance" : 4444.24394629098
}

好吧,我不明白为什么在第一种情况下没有任何结果,因为所有16个结果必须匹配给定范围...

这是更完整的数据示例:https://gist.github.com/sylvainbx/502515b809341173e0ee36d4579ba31b

有人有没有看过这个,或者对解决这个问题有任何想法?

1 个答案:

答案 0 :(得分:0)

好的,我自己找到了解决方案。通过以下方法更改查询可解决此问题:

db.getCollection('locations').aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [45.180584858570136,5.760955810546876] },
        key: "coordinates",
        spherical: true,
        distanceField: "distance",
        maxDistance: 14239,
        query: { 
            "datetime": {
                "$gte": ISODate("2019-03-01T00:00:00Z"),
                "$lt": ISODate("2019-03-02T00:00:00Z")
            }
        }
     }
   }
])