MongoDB的golang驱动安装 + 首次调用Mongo Command。

下了最新版的Mongodb3.2,下了mongodb的PHP驱动。

PHP的版本是php7,PHP的操作mongodb的类文件,结果尼玛的,提示Mongo类不存在,不知道是不是驱动下载的不是最新版的事。



看官网:https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#reference-compatibility-mongodb-php

https://pecl.php.net/package/mongodb

In the table below, mongodb and mongo refer to the new and legacy MongoDB PHP driver, respectively.PHPLIB refers to the userland library.

PHP Driver MongoDB 2.4 MongoDB 2.6 MongoDB 3.0 MongoDB 3.2
PHPLIB 1.0 + mongodb-1.1
mongodb-1.1
mongodb-1.0  
mongo-1.6  
mongo-1.5    
mongo-1.4    
mongo-1.3      

The driver does not support older versions of MongoDB.



Dependencies
Release 1.1.7:PHP Version: PHP version 7.99.99 or older
PHP Version: PHP 5.4.0 or newer
PEAR Package: PEAR 1.4.8 or newer
Release 1.1.6:PHP Version: PHP version 7.99.99 or older
PHP Version: PHP 5.4.0 or newer
PEAR Package: PEAR 1.4.8 or newer
Release 1.1.5:PHP Version: PHP version 7.99.99 or older
PHP Version: PHP 5.4.0 or newer
PEAR Package: PEAR 1.4.8 or newer
Dependencies for older releases can be found on the release overview page.

好像是暂时还有适合PHP7的Mongodb的驱动。。。。。。



既然PHP不行,那就用Golang,用golang做个web api吧,反正最近Golang特热门的。

搜索下Mongodb的golang驱动,不少人推荐mgo的,那就随大众吧,去github上搜了mgo,安装下载。

github地址:https://github.com/go-mgo/mgo

官网地址:http://labix.org/mgo

安装地址:go get gopkg.in/mgo.v2

API文档地址:https://godoc.org/gopkg.in/mgo.v2

官网提供的demo:

package main

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

type Person struct {
        Name string
        Phone string
}

func main() {
        session, err := mgo.Dial("server1.example.com,server2.example.com")
        if err != nil {
                panic(err)
        }
        defer session.Close()

        // Optional. Switch the session to a monotonic behavior.
        session.SetMode(mgo.Monotonic, true)

        c := session.DB("test").C("people")
        err = c.Insert(&Person{"Ale", "+55 53 8116 9639"},
	               &Person{"Cla", "+55 53 8402 8510"})
        if err != nil {
                log.Fatal(err)
        }

        result := Person{}
        err = c.Find(bson.M{"name": "Ale"}).One(&result)
        if err != nil {
                log.Fatal(err)
        }

        fmt.Println("Phone:", result.Phone)
}

简单加easy的,安装跑demo,完毕。


mongodb的Command的文档地址:

https://docs.mongodb.com/manual/reference/command/



大约要实现的功能是,插入一定数量的经纬度坐标点,然后根据根据指定的经纬度查询附近一定距离内的坐标点。

上个栗子:

package main
/**
@author 908204694@qq.com
*/
import (
	"fmt"
	"log"
	"net/http"
	"reflect"
	"strings"

	"gopkg.in/mgo.v2"
	"gopkg.in/mgo.v2/bson"
)

const MONGO_URL = "localhost:27017"

type LocS struct {
	Type        string     `bson:"type"`
	Coordinates [2]float32 `bson:"Coordinates"`
}

type Point struct {
	Loc  LocS   `bson:"loc"`
	Name string `bson:"name"`
}

/**
注意 索引要设置成 2dsphere
db.lbsplace.ensureIndex(  
    {  
        loc: "2dsphere"  
    }  
) 
*/


// 接收web form中送过来的坐标点
// 暂时是使用的固定值。
// 添加坐标点
func addPoint(w http.ResponseWriter, r *http.Request) {
	// 解析参数, 默认是不会解析的
	r.ParseForm()

	loc := LocS{"Point", [2]float32{12.33, 44.55}}
	point := Point{loc, "一号店"}
	
	session, err := mgo.Dial(MONGO_URL)
	if err != nil {
		panic(err)
	}
	defer session.Close()

	// Optional. Switch the session to a monotonic behavior.
	session.SetMode(mgo.Monotonic, true)

	// database->collection
	c := session.DB("lbs").C("lbsplace")
	err = c.Insert(&point)
	if err != nil {
		log.Fatal(err)
	}

}

// 接收web form中送过来的坐标点
// 暂时是使用的固定值。
// 查询附近,打印查询结果
func showPoint(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()

	session, err := mgo.Dial(MONGO_URL)
	if err != nil {
		panic(err)
	}
	defer session.Close()
	session.SetMode(mgo.Monotonic, true)
	db := session.DB("lbs")

	// 看了下源码,返回值必须是 reflect.Ptr 或者 reflect.Map ,否则返回error或者nil。
	// 就这么一个返回值的,浪费我好长时间,以为是command写的有问题的,。。。官网的文档写的不太详细
	result := bson.M{}
	errRun := db.Run(
		bson.D{
			{"geoNear", "lbsplace"},
			{"spherical", true},
			{"near", [2]float64{
				118.19079, 35.677136}},
			{"num", 2}},
		&result)

	fmt.Println("result:", result, errRun)
}

func sayHello(w http.ResponseWriter, r *http.Request) {

	fmt.Fprintf(w, "Hello!\n")
}

func main() {

	// 设置访问的路由
	http.HandleFunc("/", sayHello)
	http.HandleFunc("/addpoint", addPoint)
	http.HandleFunc("/showpoint", showPoint)

	// 设置监听的端口
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值