gpt4 book ai didi

php - 具有不同值和排序值的 MongoDB geoNear

转载 作者:可可西里 更新时间:2023-11-01 10:43:50 25 4
gpt4 key购买 nike

我的收藏有如下字段,存储用户签到(地理坐标)

{
"_id" : ObjectId("5333c3063b15ea390b3c986a"),
"userID" : "5332cad33b15eaaf643c986a",
"timestamp" : ISODate("2014-03-27T06:19:50.129Z"),
"loc" : {
"type" : "Point",
"coordinates" : [
76.980286,
10.934041
]
}
}
{
"_id" : ObjectId("53353a0d3b15ea063a3c986a"),
"userID" : "533268983b15ea9f5a3c986c",
"timestamp" : ISODate("2014-03-28T08:59:57.907Z"),
"loc" : {
"type" : "Point",
"coordinates" : [
76.980019,
10.934072
]
}
}
{
"_id" : ObjectId("53353a5d3b15eacc393c986c"),
"userID" : "533268983b15ea9f5a3c986c",
"timestamp" : ISODate("2014-03-28T09:01:17.479Z"),
"loc" : {
"type" : "Point",
"coordinates" : [
76.980057,
10.933996
]
}
}

我正在使用 geoNear 来计算距离。结果应该是最新的用户签到(地理坐标),即根据 timestamp 排序以获得最新的签到并根据 userID

进行区分

我正在尝试下面的代码,但它没有帮助

db.runCommand( 
{
"geoNear" : "locations",
"near" : [76.980286, 10.934041 ],
"num" : 100,
"spherical" : true,
"maxDistance" :1000,
"query" : {
"distinct" : { "userID" : true } ,
"sort" : { "timestamp" : -1 }
}
}
)

告诉我哪里错了!

最佳答案

再看看这个,你似乎想要的是.aggregate()表单,从 2.4 版本开始可用:

db.users.aggregate([
{ "$geoNear": {
"near" : [76.980286, 10.934041 ],
"num" : 100,
"spherical" : true,
"maxDistance" :1000,
"distanceField": "calculated"
}},
{ "$sort": { "timestamp": -1, "calculated": 1 } },
{ "$group": {
"_id": "$userID",
"loc": { "$first": "$loc" },
"calculated": { "$first": "$calculated" }
}},
])

所以它所做的是使用 $geoNear聚合中的运算符,以便根据“地理索引”在此处“投影”一个“distanceField”。那么你实际上似乎想要$sort这些结果,但合乎逻辑要做的事情是按“时间戳”“排序”以获得最新值,然后按“计算距离”作为“最近”。

操作的最后一部分是您需要“不同的”userID 值。所以你使用 $group此处获取结果,使用排序后应该是 $first在分组边界上找到的项目。

因此,应该根据“最新”时间戳 值为您提供“最接近”给定位置的“不同”用户。

认为是您想要的。

关于php - 具有不同值和排序值的 MongoDB geoNear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22727589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com