当前位置: 首页 > news >正文

go mongo 唯一索引创建

1. 登录mongo,创建数据库

mongosh -u $username -p $password
use test

2. 查看集合索引

db.$collection_name.getIndexes()

为不存在的集合创建字段唯一索引

package mainimport ("context""fmt""log""time""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options""go.mongodb.org/mongo-driver/mongo/readpref"
)func main() {ctx := context.Background()addr := "127.0.0.1:27027"database := "test"userName := "test"password := "123456"var maxPoolSize uint64 = 100// Setup MongoDB client// 建立连接client, err := mongo.Connect(ctx,options.Client().// 连接地址ApplyURI(fmt.Sprintf("mongodb://%s/%s", addr, database)).SetAuth( // 设置验证参数options.Credential{Username:   userName, // 用户名Password:   password, // 密码AuthSource: database,}).// 设置连接数SetMaxPoolSize(maxPoolSize))if err != nil {log.Fatal(err)}ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)defer cancel()// Ping MongoDBerr = client.Ping(ctx, readpref.Primary())if err != nil {log.Fatalf("Failed to ping mongo: %v", err)}db := client.Database("sec_ped")collection := db.Collection("nonexistent_collection")// 定义索引模型indexModel := mongo.IndexModel{Keys:    bson.D{{Key: "fieldname", Value: 1}}, // 索引键Options: options.Index().SetName("index_on_fieldname").SetUnique(true),}// 创建索引indexName, err := collection.Indexes().CreateOne(ctx, indexModel)if err != nil {log.Fatal(err)}fmt.Printf("Created index %s\n", indexName)// 关闭客户端连接if err := client.Disconnect(context.TODO()); err != nil {log.Fatal(err)}fmt.Println("Connection to MongoDB closed.")
}
  • 结论
    (1)多次运行不会报错,说明可以重复创建索引
    (2)可以为不存在的集合创建索引

为存在重复字段的集合创建唯一索引

package mainimport ("context""fmt""log""time""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/options""go.mongodb.org/mongo-driver/mongo/readpref"
)func main() {ctx := context.Background()addr := "127.0.0.1:27027"database := "test"userName := "test"password := "123456"var maxPoolSize uint64 = 100// Setup MongoDB client// 建立连接client, err := mongo.Connect(ctx,options.Client().// 连接地址ApplyURI(fmt.Sprintf("mongodb://%s/%s", addr, database)).SetAuth( // 设置验证参数options.Credential{Username:   userName, // 用户名Password:   password, // 密码AuthSource: database,}).// 设置连接数SetMaxPoolSize(maxPoolSize))if err != nil {log.Fatal(err)}ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)defer cancel()// Ping MongoDBerr = client.Ping(ctx, readpref.Primary())if err != nil {log.Fatalf("Failed to ping mongo: %v", err)}db := client.Database("sec_ped")collection := db.Collection("nonexistent_collection")// 插入两条重复的数据docs := []interface{}{bson.D{{Key: "fieldname", Value: "value1"}, {Key: "otherfield", Value: "data1"}},bson.D{{Key: "fieldname", Value: "value1"}, {Key: "otherfield", Value: "data2"}},}insertManyResult, err := collection.InsertMany(ctx, docs)if err != nil {log.Fatal(err)}fmt.Printf("Inserted documents: %v\n", insertManyResult.InsertedIDs)// 定义索引模型indexModel := mongo.IndexModel{Keys: bson.D{{Key: "fieldname", Value: 1}}, // 索引键Options: options.Index().SetName("index_on_fieldname").SetUnique(true),}// 创建索引indexName, err := collection.Indexes().CreateOne(ctx, indexModel)if err != nil {log.Fatal(err)}fmt.Printf("Created index %s\n", indexName)// 关闭客户端连接if err := client.Disconnect(context.TODO()); err != nil {log.Fatal(err)}fmt.Println("Connection to MongoDB closed.")
}
  • 结论
    (1)会报创建索引错误,说明针对存在重复值的字段,无法创建唯一索引
http://www.lryc.cn/news/361229.html

相关文章:

  • 微信小程序如何进行页面跳转
  • 信息标记形式 (XML, JSON, YAML)
  • C语言:学生成绩管理系统(含源代码)
  • MySQL 导出导入的101个坑
  • OpenCv之简单的人脸识别项目(人脸提取页面)
  • linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等
  • 【Linux-INPUT输入的子系统】
  • 密码加密及验证
  • 找出字符串中出现最多次数的字符以及出现的次数
  • 如何看待央行买卖长期国债?
  • MATLAB算法实战应用案例精讲-【数模应用】Turf组合模型(附MATLAB、python和R语言代码实现)
  • android源码下载编译模拟器运行
  • Golang:Sirupsen/logrus是一个日志库
  • Android Studio插件开发 - Dora SDK的IDE插件
  • 【mybatis】缓存
  • 自定义类型:结构体类型
  • C++对象移动
  • “华为杯”第十三届中国研究生 数学建模竞赛-E题:粮食最低收购价政策问题研究(续)
  • (一)django目录介绍
  • leetcode5 最长回文子串
  • 《论文阅读》通过顺序不敏感的表示正则化实现稳健的个性化对话生成 ACL 2023
  • python采集汽车价格数据
  • 德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第四周) - 语言建模
  • Jitsi meet 退出房间后,用户还在房间内
  • Java 18 新特性
  • c++基础创建对象
  • WHAT - 容器化系列(二)- docker
  • 力扣 19题 删除链表的倒数第 N 个结点 记录
  • 渗透测试之Web安全系列教程(二)
  • 【算法】在?复习一下快速排序?