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

ribavnu · · 2747 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

下了最新版的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)
	}
}






本文来自:CSDN博客

感谢作者:ribavnu

查看原文:MongoDB的golang驱动安装 + 首次调用Mongo Command。

入群交流(和以上内容无关):加入Go大咖交流群,免费领全套学习资料或添加微信:muxilin131420 备注:入群;或加QQ群:729884609

2747 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传