最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • [js go]用go操作mongodb

    正文概述 掘金(jslgo)   2020-12-27   358

    安装好mongodb后咱们就可以用go来操作mongodb, 进行快乐的CRUD了

    安装mogodb驱动

    $ go get github.com/mongodb/mongo-go-driver 
    

    连接mongodb

    	// 设置客户端连接配置
    	clientOptions := options.Client().ApplyURI("mongodb://user:pwd@server:port/db")
    
    	// 连接到MongoDB
    	client, err := mongo.Connect(context.TODO(), clientOptions)
    	if err != nil {
    		log.Fatal(err)
    	} else {
    		fmt.Printf("client %#v \n", client) // client &mongo.Client{...}
    	}
    

    检查连接

    	// 检查连接
    	err = client.Ping(context.TODO(), nil)
    	if err != nil {
    		log.Fatal(err)
    	} else {
    		fmt.Println("Connected to MongoDB!")
    	}
    

    连接数据集

    相当于mysql中的table

    	// 数据集
    	collection := client.Database("db").Collection("coder")
    	fmt.Printf("collection %#v \n", collection) // collection &mongo.Collection{...}
    

    增加一行文档

    相当于js的db.coder.insertOne({})

    	s1 := Coder{"写代码的老哥0", 35}
    	insertResult, err := collection.InsertOne(context.TODO(), s1)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Println("Inserted a single document: ", insertResult.InsertedID) // ObjectID("5fe81819be51c1175cd95ba3")
    

    用Robo 3T查看 [js go]用go操作mongodb

    增加多行文档

    相当于js的db.coder.insertMany([...])

    	// 插入多个
          	s2 := Coder{"写代码的老哥1", 36}
    	s3 := Coder{"写代码的老哥2", 37}
    	coders := []interface{}{s2, s3}
    	insertManyResult, err := collection.InsertMany(context.TODO(), coders)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Println("Inserted multiple documents: ", insertManyResult.InsertedIDs) // Inserted multiple documents:  [ObjectID("5fe818a70bb1cc7b7b030fe7") ObjectID("5fe818a70bb1cc7b7b030fe8")]
    

    [js go]用go操作mongodb

    查找一个

    相当于js的bd.coder.find(filter)

    	filter := bson.D{{"name", "写代码的老哥0"}}
    	var result Coder
    	err = collection.FindOne(context.TODO(), filter).Decode(&result)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Found a single document: %+v\n", result)
    

    查找多个

    相当于js的db.coder.find()

    	// 查询多个
    	// 将选项传递给Find()
    	findOptions := options.Find()
    	findOptions.SetLimit(2)
    
    	// 定义一个切片用来存储查询结果
    	var results []*Coder
    
    	// 把bson.D{{}}作为一个filter来匹配所有文档
    	cur, err := collection.Find(context.TODO(), bson.D{{}}, findOptions)
    	if err != nil {
    		log.Fatal(err)
    	}
    
    	// 查找多个文档返回一个游标
    	// 遍历游标允许我们一次解码一个文档
    	for cur.Next(context.TODO()) {
    		// 创建一个值,将单个文档解码为该值
    		var elem Coder
    		err := cur.Decode(&elem)
    		if err != nil {
    			log.Fatal(err)
    		}
    		results = append(results, &elem)
    	}
    
    	if err := cur.Err(); err != nil {
    		log.Fatal(err)
    	}
    
    	// 完成后关闭游标
    	cur.Close(context.TODO())
    
    	fmt.Printf("Found multiple documents (array of pointers): %#v\n", results)
    
    	for index, coder := range results {
    		fmt.Printf("coder %v name %v age %v \n", index, coder.Name, coder.Age)
    	}
    

    更新

    相当于js的db.coder.update(...)

    	// 查找过滤
    	filter := bson.D{{"name", "写代码的老哥0"}}
    	// 更新
    	update := bson.D{
    		{"$inc", bson.D{
    			{"age", 1},
    		}},
    	}
    	updateResult, err := collection.UpdateOne(context.TODO(), filter, update)
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Matched %v documents and updated %v documents. \n", updateResult.MatchedCount, updateResult.ModifiedCount)
    

    [js go]用go操作mongodb

    删除一个

    相当于js的db.coder.deleteOne(...)

    	deleteResult1, err := collection.DeleteOne(context.TODO(), bson.D{{"name","写代码的老哥0"}})
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Deleted %v documents in the collection\n", deleteResult1.DeletedCount)
    

    [js go]用go操作mongodb

    删除多个

    相当于js的db.coder.drop()

    	// 删除所有
    	deleteResult2, err := collection.DeleteMany(context.TODO(), bson.D{{}})
    	if err != nil {
    		log.Fatal(err)
    	}
    	fmt.Printf("Deleted %v documents in the collection\n", deleteResult2.DeletedCount)
    

    [js go]用go操作mongodb


    起源地下载网 » [js go]用go操作mongodb

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元