Go使用MongoDB——Qmgo框架

Qmgo 是一款Go语言的MongoDB driver,它基于MongoDB 官方 driver 开发实现,同时使用更易用的接口设计,比如参考mgo (比如mgo的链式调用)。

  • Qmgo让您以更优雅的姿势使用MongoDB的新特性。
  • Qmgo是从mgo迁移到新MongoDB driver的第一选择,对代码的改动影响最小。

1.综合使用

package main

import (
	"context"
	"fmt"
	"github.com/qiniu/qmgo"
	"go.mongodb.org/mongo-driver/bson"
)

func main() {
	ctx := context.Background()
	cli, err := qmgo.Open(ctx, &qmgo.Config{Uri: "mongodb://localhost:27017", Database: "test", Coll: "user"})
	defer func() {
		if err = cli.Close(ctx); err != nil {
			panic(err)
		}
	}()
	type UserInfo struct {
		Name   string `bson:"name"`
		Age    uint16 `bson:"age"`
		Weight uint32 `bson:"weight"`
	}

	var userInfo = UserInfo{
		Name:   "xm",
		Age:    7,
		Weight: 40,
	}
	//cli.CreateOneIndex(context.Background(), options.IndexModel{Key: []string{"name"}})
	//cli.CreateIndexes(context.Background(), []options.IndexModel{{Key: []string{"id2", "id3"}}})

	// insert one document
	result, err := cli.InsertOne(ctx, userInfo)
	fmt.Println("插入一条数据")
	fmt.Println(result) // &{ObjectID("633aafb8059f29c39a396235")}

	// find one document
	one := UserInfo{}
	err = cli.Find(ctx, bson.M{"name": userInfo.Name}).One(&one)
	fmt.Println("根据name查询")
	fmt.Println(one) //{xm 7 40}
	// multiple insert
	var userInfos = []UserInfo{
		UserInfo{Name: "a1", Age: 6, Weight: 20},
		UserInfo{Name: "b2", Age: 6, Weight: 25},
		UserInfo{Name: "c3", Age: 6, Weight: 30},
		UserInfo{Name: "d4", Age: 6, Weight: 35},
		UserInfo{Name: "a1", Age: 7, Weight: 40},
		UserInfo{Name: "a1", Age: 8, Weight: 45},
	}
	result1, err := cli.Collection.InsertMany(ctx, userInfos)
	fmt.Println("插入多条数据")
	fmt.Println(result1)
	/*
		&{[ObjectID("633aafb8059f29c39a396236") ObjectID("633aafb8059f29c39a396237")
		ObjectID("633aafb8059f29c39a396238") ObjectID("633aafb8059f29c39a396239")
		ObjectID("633aafb8059f29c39a39623a") ObjectID("633aafb8059f29c39a39623b")]}
	*/

	// 删除数据
	err = cli.Remove(ctx, bson.M{"age": 7})

	// find all 、sort and limit
	batch := []UserInfo{}
	cli.Find(ctx, bson.M{"age": 6}).Sort("weight").Limit(7).All(&batch)
	fmt.Println("sort+limit查询")
	fmt.Println(batch) //[{a1 6 20} {b2 6 25} {c3 6 30} {d4 6 35}]
	count, err := cli.Find(ctx, bson.M{"age": 6}).Count()

	fmt.Printf("age=6 的个数为: %d\n", count) //age=6 的个数为: 4

}

在这里插入图片描述

2.参考文章

官方文档

文章1

原生框架1

原生框架2

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐