gpt4 book ai didi

mongodb - Geonear 和多个 2dsphere 索引

转载 作者:行者123 更新时间:2023-12-03 16:00:08 25 4
gpt4 key购买 nike

如果存储点的模式中存在多个 2dsphere 索引,我有一个关于使用 $near 与 geonear 从用户输入的兴趣点返回数据库中存储点的距离的问题。

用例如下。

在我的架构中,我有一个源位置和一个目标位置,如下所示。使用 Intracity.find 的查询工作正常,并为我提供了从输入的兴趣点排序的条目。

var baseShippingSchema = new mongoose.Schema({  
startDate : Date,
endDate : Date,
locSource: {
type: [Number],
index: '2dsphere'
},
locDest: {
type: [Number],
index: '2dsphere'
}
});

var search_begin = moment(request.body.startDate0, "DD-MM-YYYY").toDate();
var search_end = moment(request.body.endDate1, "DD-MM-YYYY").toDate();
var radius = 7000;

Intracity.find({
locSource: {
$near:{$geometry: {type: "Point",
coordinates: [request.body.lng0,request.body.lat0]},
$minDistance: 0,
$maxDistance: radius
}
}).where('startDate').gte(search_begin)
.where('endDate').lte(search_end)
.limit(limit).exec(function(err, results)
{
response.render('test.html', {results : results, error: error});
}

但是,我还想返回存储点与兴趣点的“距离”,根据我的知识和发现,使用 $near 是不可能的,但可以使用 < geonear API。

但是,documentation geonear 的说法如下。

geoNear 需要地理空间索引。但是,geoNear 命令要求集合最多只有一个 2d 索引和/或只有一个 2dsphere。

由于在我的架构中,我有两个 2dspehere 索引,因此以下 geoNear api 失败,并出现错误“多个 2d 索引,不确定在哪个上运行 geoNear

var point = { name: 'locSource', type : "Point", 
coordinates : [request.body.lng0 , request.body.lat0] };

Intracity.geoNear(point, { limit: 10, spherical: true, maxDistance:radius, startDate:{ $gte: search_begin}, endDate:{ $lte:search_end}}, function(err, results, stats) {
if (err){return done(err);}
response.render('test.html', {results : results, error: error});
});

所以我的问题是如何使用上述模式从输入的兴趣点获取每个存储点的距离。

任何帮助都会非常好,因为我的互联网搜索无处可去。

谢谢姆鲁纳尔

最佳答案

正如您所注意到的 mongodb docs说明

The geoNear command and the $geoNear pipeline stage require that a collection have at most only one 2dsphere index and/or only one 2d index

另一方面,计算 mongo 内部的距离只能使用聚合框架,因为它是一个专门的投影。如果您不想选择

  1. 关系数据库方法:在所有项目之间维护一个单独的距离表

那么你的另一个选择是

  • 文档存储方法:在服务器端 JS 代码中计算距离。您必须通过对结果进行分页来覆盖内存限制。
  • 关于mongodb - Geonear 和多个 2dsphere 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37565251/

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