[js go]用go操作mongodb

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

安装好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的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的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的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的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)复制代码


有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb6013c0cc735b5

查看原文:[js go]用go操作mongodb

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

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