在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
有人有没有看过这个,或者对解决这个问题有任何想法?
答案 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")
}
}
}
}
])