Golang Mongo BulkWrite upsert 用法示例

文档地址: https://godoc.org/go.mongodb.org/mongo-driver/mongo#example-Collection-BulkWrite

package main

import (
	"fmt"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo/options"
	"context"
	"time"
)

import mog 	"go.mongodb.org/mongo-driver/mongo"

func main(){
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	host := "填写你的mongodb地址"
	client, err := mog.Connect(ctx, options.Client().ApplyURI(host))
	if err != nil {
		panic(err)
	}

	defer cancel()
	firstUpdate := bson.D{{"$set", bson.D{{"email", "2firstEmail@example.com"}}}}
	secondUpdate := bson.D{{"$set", bson.D{{"email", "2secondEmail@example.com"}}}}
	models := []mog.WriteModel{
		mog.NewUpdateOneModel().SetFilter(bson.D{{"_id", "firstID" }}).SetUpdate(firstUpdate).SetUpsert(true),
		mog.NewUpdateOneModel().SetFilter(bson.D{{"_id", "secondID" }}).SetUpdate(secondUpdate).SetUpsert(true),
	}

	opts := options.BulkWrite().SetOrdered(false)
	res, err := client.Database(conf.Mongo.Database).Collection("test_bulk").BulkWrite(context.TODO(), models, opts)

	if err != nil {
		fmt.Println( err)
	}

	fmt.Println( res )

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Go语言中的net包来实现获取网卡网关代码示例。下面是一个示例:ifaces, err := net.Interfaces() if err != nil { fmt.Print(err) return }for _, i := range ifaces { addrs, err := i.Addrs() if err != nil { fmt.Print(err) return } for _, addr := range addrs { var ip net.IP switch v := addr.(type) { case *net.IPNet: ip = v.IP case *net.IPAddr: ip = v.IP } fmt.Println("IP:", ip) } } ### 回答2: 以下是一个使用golang实现获取网卡网关的代码示例: ```go package main import ( "fmt" "net" ) func main() { // 获取所有网络接口 interfaces, err := net.Interfaces() if err != nil { fmt.Println("获取网络接口失败:", err) return } // 遍历所有网络接口 for _, iface := range interfaces { // 排除掉虚拟接口和回环接口 if iface.Flags&net.FlagLoopback == 0 && iface.Flags&net.FlagUp != 0 { // 获取接口的地址列表 addrs, err := iface.Addrs() if err != nil { fmt.Println("获取接口地址失败:", err) continue } // 遍历接口的地址列表 for _, addr := range addrs { // 判断地址是否为IP地址 ipNet, ok := addr.(*net.IPNet) if !ok { continue } // 判断IP地址是否为IPv4地址 if ipNet.IP.To4() != nil { // 获取网关地址 gateway := getGateway(iface.Index) fmt.Printf("网卡:%s\nIP地址:%s\n网关:%s\n\n", iface.Name, ipNet.IP.String(), gateway) } } } } } // 获取网关地址 func getGateway(ifaceIndex int) net.IP { routes, err := net.Interfaces() if err != nil { return nil } // 遍历所有路由 for _, route := range routes { // 判断路由是否与指定接口匹配 if route.Index == ifaceIndex { // 获取路由的地址列表 addrs, err := route.Addrs() if err != nil { continue } // 遍历地址列表 for _, addr := range addrs { // 判断地址是否为IP地址 ipNet, ok := addr.(*net.IPNet) if !ok { continue } // 判断IP地址是否为网关地址 if !ipNet.IP.IsLoopback() && ipNet.IP.To4() != nil { return ipNet.IP } } } } return nil } ``` 该代码首先通过`net.Interfaces()`函数获取所有网络接口,然后遍历每个接口,排除掉虚拟接口和回环接口。对于每个有效的接口,它获取接口的地址列表,并遍历每个地址,判断是否为IPv4地址。如果是IPv4地址,则调用`getGateway()`函数获取网关地址,并打印出网卡名称、IP地址和网关地址。 在`getGateway()`函数中,它通过再次调用`net.Interfaces()`函数获取所有接口,然后遍历每个接口,判断接口与指定接口是否匹配。如果匹配,则获取该接口的地址列表,并遍历地址列表,判断是否为IPv4网关地址。如果是,则返回该网关地址。 该示例代码可以帮助你在golang中获取网卡的网关地址。 ### 回答3: 下面是使用Go语言实现获取网卡网关的代码示例: ```go package main import ( "fmt" "net" ) func main() { ifaces, err := net.Interfaces() if err != nil { fmt.Println("获取网卡信息失败:", err) return } for _, iface := range ifaces { addrs, err := iface.Addrs() if err != nil { fmt.Println("获取网卡地址失败:", err) continue } for _, addr := range addrs { ipnet, ok := addr.(*net.IPNet) if ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { gatewayIP := getGatewayIP(iface.Name) fmt.Printf("网卡名称: %v\n", iface.Name) fmt.Printf("IP地址: %v\n", ipnet.IP.String()) fmt.Printf("网关地址: %v\n", gatewayIP) } } } } } func getGatewayIP(ifaceName string) string { iface, err := net.InterfaceByName(ifaceName) if err != nil { fmt.Println("获取网卡信息失败:", err) return "" } addrs, err := iface.Addrs() if err != nil { fmt.Println("获取网卡地址失败:", err) return "" } for _, addr := range addrs { ipnet, ok := addr.(*net.IPNet) if ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil { return ipnet.IP.Mask(ipnet.IP.DefaultMask()).String() } } return "" } ``` 以上代码通过`net.Interfaces()`函数获取本机所有的网卡信息,然后遍历每个网卡的地址,排除回环地址和IPv6地址,最后通过`getGatewayIP()`函数获取网卡的网关地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值