从MongoDB获取两个地理位置之间的距离

rhfm7lfc  于 2022-12-31  发布在  Go
关注(0)|答案(1)|浏览(194)

我正在用Go语言从MongoDB中计算二维球面上两点之间的距离。
我遵循this answer并尝试了以下操作

conditions["geolocation"] = bson.M{
        "$geoNear": bson.M{
            "near": bson.M{
                "type":        "Point",
                "coordinates": []float64{latitude, longitude},
            },
            "maxDistance":   rangeInMeters,
            "spherical":     true,
            "distanceField": "distance",
        },
    }

filterCursor, err := collection.Find(ctx, conditions)

但我得到这个错误:* "geo near查询中的参数无效:near"*

lsmepo6l

lsmepo6l1#

上述答案使用MongoDB aggregate函数。
你可以像下面这样用golang来实现这一点:

stages := mongo.Pipeline{}
    getNearbyStage := bson.D{{"$geoNear", bson.M{
        "near": bson.M{
            "type":        "Point",
            "coordinates": []float64{longitude, latitude},
        },
        "maxDistance":   rangeInMeters,
        "spherical":     true,
        "distanceField": "distance",
    }}}
    stages = append(stages, getNearbyStage)

    filterCursor, err := collection.Aggregate(ctx, stages)

    if err != nil {
        log.Println(err)
        return nil, err
    }

如果要向管道线添加另一个查询,只需创建另一个stage并将其附加到stages切片即可
我也可以查看这个快速指南,了解如何在golang & mongo Golang & MongoDB - Data Aggregation Pipeline中使用聚合管道

相关问题