Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有golang和mongodb的storelocator_Mongodb_Go_Geolocation_Mgo - Fatal编程技术网

带有golang和mongodb的storelocator

带有golang和mongodb的storelocator,mongodb,go,geolocation,mgo,Mongodb,Go,Geolocation,Mgo,嘿,我正在尝试使用golang和mongodb构建一个商店定位器。 我对两者都是新手。我尝试搜索,但在golang中找不到代码,该代码可以帮助我将带有名称和坐标的商店插入mongodb,然后在提供的经纬度值的3000米半径范围内搜索商店 注意:我想自己提供id,这样如果我有id,我就可以很容易地拿到商店 我尝试如下所示,但没有发生任何事情,没有错误,也没有在db中插入存储 test.go如下所示: package main import ( "encoding/json" "f

嘿,我正在尝试使用golang和mongodb构建一个商店定位器。 我对两者都是新手。我尝试搜索,但在golang中找不到代码,该代码可以帮助我将带有名称和坐标的商店插入mongodb,然后在提供的经纬度值的3000米半径范围内搜索商店

注意:我想自己提供id,这样如果我有id,我就可以很容易地拿到商店

我尝试如下所示,但没有发生任何事情,没有错误,也没有在db中插入存储

test.go如下所示:

package main

import (
    "encoding/json"
    "fmt"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
    "log"
)

type Store struct {
    ID       string  `bson:"_id,omitempty" json:"shopid"`
    Name     string  `bson:"name" json:"name"`
    Location GeoJson `bson:"location" json:"location"`
}

type GeoJson struct {
    Type        string    `json:"-"`
    Coordinates []float64 `json:"coordinates"`
}

func main() {
    cluster := "localhost" // mongodb host

    // connect to mongo
    session, err := mgo.Dial(cluster)
    if err != nil {
        log.Fatal("could not connect to db: ", err)
        panic(err)
    }
    defer session.Close()
    session.SetMode(mgo.Monotonic, true)

    // search criteria
    long := 39.70
    lat := 35.69
    scope := 3000 // max distance in metres

    var results []Store // to hold the results

    // query the database
    c := session.DB("test").C("stores")

    // insert
    man := Store{}
    man.ID = "1"
    man.Name = "vinka medical store"
    man.Location.Type = "Point"
    man.Location.Coordinates = []float64{lat, long}

    // insert
    err = c.Insert(man)
    fmt.Printf("%v\n", man)
    if err != nil {
        fmt.Println("There is insert error")
        panic(err)
    }

    // ensure
    // Creating the indexes
    index := mgo.Index{
        Key:  []string{"$2dsphere:location"},
        Bits: 26,
    }
    err = c.EnsureIndex(index)
    if err != nil {
        fmt.Println("There is index error")
        panic(err)
    }

    //find
    err = c.Find(bson.M{
        "location": bson.M{
            "$nearSphere": bson.M{
                "$geometry": bson.M{
                    "type":        "Point",
                    "coordinates": []float64{long, lat},
                },
                "$maxDistance": scope,
            },
        },
    }).All(&results)

    //err = c.Find(bson.M{"_id": "1"}).All(&results)
    if err != nil {
        panic(err)
    }

    //convert it to JSON so it can be displayed
    formatter := json.MarshalIndent
    response, err := formatter(results, " ", "   ")

    fmt.Println(string(response))
}
@用户7227958

由于坐标的精确性(缺乏),Go似乎在和你玩把戏

选中此项: 对于long:=39.70和lat:=35.69,您需要一个范围=3000000才能选择记录。 但是如果你使用更精确的坐标,比如

长:=39.6910592
纬度:=35.6909623
然后,即使在1米的范围内(这是预期的),您也可以找到您的店铺

干杯, -D