【发布时间】:2020-10-02 10:44:24
【问题描述】:
我有一个名为 services 的 MongoDB 集合,每个集合都有多个嵌入位置。
看起来像这样:
{
name: "example",
locations: [
{
coordinates: [0, 0]
},
{
coordinates: [0, 0]
},
]
}
我想对 $unwind 数据结构使用聚合,因此每个位置都被视为单独的文档,然后使用 $geoNear 根据与用户提供的点的距离对每个位置进行排序,如下所示:
db.collection("services").aggregate([
{ $unwind : "$locations" }
{ $geoNear: {
near: [0, 0],
distanceField: "distance"
}},
不过,很自然,$geoNear 想成为first thing in an aggregation,我很难理解如果没有 $unwind 先出现它是如何工作的。
创建索引 似乎 成功,但是当我尝试运行它时,我收到“无法找到 $geoNear 查询的索引”错误。
我能否以某种方式运行一个聚合,然后对结果运行另一个聚合?
或者,有没有办法在没有聚合的情况下做到这一点?
重要的是,简单地更改数据架构并不容易,因为 mongo 被用作搜索索引之类的东西,而数据本身来自其他地方的关系数据库。
我或许可以考虑创建第二个预展开数据的集合? MongoDB 是否有某种回调可以减轻这种痛苦?
【问题讨论】:
标签: node.js mongodb aggregation-framework geo