Go使用MongoDB——Qmgo框架

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go使用MongoDB——Qmgo框架相关的知识,希望对你有一定的参考价值。

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.ConfigUri: "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.IndexModelKey: []string"name")
	//cli.CreateIndexes(context.Background(), []options.IndexModelKey: []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
		UserInfoName: "a1", Age: 6, Weight: 20,
		UserInfoName: "b2", Age: 6, Weight: 25,
		UserInfoName: "c3", Age: 6, Weight: 30,
		UserInfoName: "d4", Age: 6, Weight: 35,
		UserInfoName: "a1", Age: 7, Weight: 40,
		UserInfoName: "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

以上是关于Go使用MongoDB——Qmgo框架的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB——qmgo进阶使用

解决qmgo中each数组传参问题

Go + MongoDB:多态查询

如何在 Go 中使用 .crt 文件通过 ssl 连接到 mongoDB

golang Go中的简单HTTP服务器使用mongoDB和通道

go任务调度10(操作mongodb)