为了账号安全,请及时绑定邮箱和手机立即绑定

无法通过 2sphere 找到元素

无法通过 2sphere 找到元素

Go
森林海 2023-06-05 19:40:47
我来是因为我需要实现地理计算,但是,它不起作用。我目前正在使用这个包globalsign/mgo从文档中我们有这个:db.<collection>.find( { <location field> :        { $near :            { $geometry :                { type : "Point" ,                     coordinates : [ <longitude> , <latitude> ] } ,                     $maxDistance : <distance in meters>,                }             }       }  查询2dsphere索引:https://docs.mongodb.com/manual/tutorial/query-a-2dsphere-index/ 2dsphere索引:https://docs.mongodb.com/manual/core/2dsphere/所以我有以下内容:import (    "github.com/globalsign/mgo/bson"    "shared/models"    "time")type Address struct {    ID                 *bson.ObjectId `protobuf:"bytes,1,opt,name=id,proto3" json:"_id,omitempty" bson:"_id"`    IsArchived         bool           `protobuf:"varint,2,opt,name=IsArchived,proto3" json:"is_archived,omitempty" bson:"is_archived"`    CreatedAt          time.Time      `protobuf:"varint,3,opt,name=CreatedAt,proto3" json:"created_at,omitempty" bson:"created_at"`    UpdatedAt          time.Time      `protobuf:"varint,4,opt,name=UpdatedAt,proto3" json:"update_at,omitempty" bson:"updated_at"`    PlaceID            *bson.ObjectId `protobuf:"bytes,5,opt,name=PlaceID,proto3" json:"place_id,omitempty" bson:"place_id"`    CountryCode        string         `protobuf:"bytes,6,opt,name=CountryCode,proto3" json:"country_code,omitempty" bson:"country_code,omitempty"`    AdministrativeArea string         `protobuf:"bytes,7,opt,name=AdministrativeArea,proto3" json:"administrative_area,omitempty" bson:"administrative_area,omitempty"`由此,我收到以下错误:“错误处理查询:ns=DBNAME.addressDocumentTree:GEONEAR field=location maxdist=5e+06 isNearSphere=0\nSort:{}\nProj:{}\n 规划器返回错误:无法找到 $geoNear 查询的索引”我在程序初始化时确保我的索引
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

终于找到了问题..实际上,我没有以正确的方式创建索引..


// EnsureIndex force ids to be unique

func EnsureAddressIndex(session *mgo.Session) error {


    _session := session.Copy()

    defer _session.Close()


    c := _session.DB(constants.DBName).C(addressDocument)

    // Might be needed one day

    pIndex := mgo.Index{

        Key:  []string{"$2dsphere:location"},

        Bits: 26,

    }

    err := c.EnsureIndex(pIndex)

    if err != nil {

        return err

    }


    return nil

}

在索引声明中,我有以下行:


pIndex := mgo.Index{

    Key:  []string{"location:2dsphere"},

    Bits: 26,

}

但正确的写法是


pIndex := mgo.Index{

    Key:  []string{"$2dsphere:location"},

    Bits: 26,

}

希望能帮助到你 !


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信