【发布时间】:2017-08-01 15:42:09
【问题描述】:
我有一个包含 5400 个文档的集合。我在足球比赛中保留了 1 名球员的数据。每一秒我都会从玩家那里得到长和纬。现在我想要玩家在游戏过程中的总距离。
一些想法?
这是一个文档的示例:
{
"_id" : ObjectId("59807a01702661033d918e8e"),
"playerId" : 1,
"timestamp" : ISODate("2017-08-01T11:11:45.078Z")
"loc" : {
"type" : "Point",
"coordinates" : [
4.94193,
51.32447
]
}
}
【问题讨论】:
-
见
$geoNear。它按“最近”排序并投影到查询位置的距离。如果您希望与查询点的距离超过 100 个文档(默认返回),那么您需要增加"limit"选项以满足您的集合大小或预期结果大小,无论您实际想要什么。通常我们不关心非常多的结果选择,而只是对“最近的”感兴趣。因此是合理的默认值。 -
我已经在寻找 $geonear 但我不知道如何使用它。可以举个例子吗?
-
您的意思是和示例一样的文档页面上列出的示例,实际上链接在上面给出的评论中?如果您“已经看过”,那么您应该已经看到了文档中演示的示例用法。这就是它的用途。
-
对不起,我的英语不是我的母语。我已经写了这段代码,但是我得到了最接近那个点的 28 个坐标,但是我想要坐标 1 和 2、2 和 3、3 和 4、... 5399 和 5400 之间的距离。
db.playerTrackings_copy.aggregate([ { $geoNear: { near: { type: "Point", coordinates: [ 4.931326 , 51.3210 ] }, distanceField: "dist", spherical: true, limit: 28 }}, {$sort: {dist :-1}} ])
标签: mongodb geolocation gps