gpt4 book ai didi

node.js - 正确的 Mongodb 查询相当于 SQL 查询

转载 作者:太空宇宙 更新时间:2023-11-04 01:28:46 25 4
gpt4 key购买 nike

在 Mongodb + Nodejs 中进行精确的 sql 查询的正确方法是什么?

select *,
acos(cos(centerLat * (PI()/180)) *
cos(centerLon * (PI()/180)) *
cos(lat * (PI()/180)) *
cos(lon * (PI()/180))
+
cos(centerLat * (PI()/180)) *
sin(centerLon * (PI()/180)) *
cos(lat * (PI()/180)) *
sin(lon * (PI()/180))
+
sin(centerLat * (PI()/180)) *
sin(lat * (PI()/180))
) * 3959 as Dist
from TABLE_NAME
having Dist < radius
order by Dist

代码取自此答案: https://stackoverflow.com/a/12235184/8025329

这是我的 Mongoose 架构:

const spotSchema = new Schema({
latitude: { type: String, required: true },
longitude: { type: String, required: true },
spotDate: { type: Date, required: true }
});

我希望检索显示用户位置附近 map 中的点的记录。我认为这部分与公式+ sql 查询有关。我的问题是如何将其转换为 Mongodb + NodeJs。

谢谢大家。

最佳答案

好吧,我设法这样做了:

我从这个答案中得到了宝贵的指导: https://stackoverflow.com/a/23291154/8025329

最后,这使它工作了(它不是最终的也不是完善的,但解决了主要的挑战),我发布了最重要的部分:

Mongoose 连接(特别提及“useCreateIndex: true”):

mongoose.connect(config.MONGO_URI, { useNewUrlParser: true, useCreateIndex: true });

Mongoose 架构:

const Schema = new Schema({
loc: { type: Object, index: '2dsphere', required: true },
category: { type: String, required: true }
});

GeoJson 对象示例:

{
loc : { type: "Point", coordinates: [ longitude, latitude ] },
category : "location"
}

查找附近地点:

MongodbSchema.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [ longitude , latitude ] },
key: "loc",
distanceField: "dist.calculated",
maxDistance: 600,
query: { category: "location" },
num: 100,
spherical: true
}
}
], function(err, locations){
if (err) throw err;

res.send(locations);

});

有用的链接: https://docs.mongodb.com/manual/reference/operator/aggregation/geoNear/#pipe._S_geoNear

https://docs.mongodb.com/manual/reference/geojson/

关于node.js - 正确的 Mongodb 查询相当于 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56698765/

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