当前位置: 首页 > 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)会报创建索引错误,说明针对存在重复值的字段,无法创建唯一索引

相关文章:

go mongo 唯一索引创建

1. 登录mongo,创建数据库 mongosh -u $username -p $password use test 2. 查看集合索引 db.$collection_name.getIndexes() 为不存在的集合创建字段唯一索引 package mainimport ("context""fmt""log""time""go…...

微信小程序如何进行页面跳转

微信小程序中的页面跳转可以通过多种方式实现,以下是几种主要的跳转方式及其详细解释: wx.navigateTo 功能:保留当前页面,跳转到应用内的某个页面。特点: 可以在新页面使用wx.navigateBack返回原页面。每跳转一个新页…...

信息标记形式 (XML, JSON, YAML)

文章目录 🖥️介绍🖥️三种形式🏷️XML (Extensible Markup Language)🔖规范🔖注释🔖举例🔖其他 🏷️JSON (JavaScript Object Notation)🔖规范🔖注释&#x…...

C语言:学生成绩管理系统(含源代码)

一.功能 二.源代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NUM 100 typedef struct {char no[30];char name[10];char sex[10];char phone[20];float cyuyan;float computer;float datastruct; } *student, student1;typ…...

MySQL 导出导入的101个坑

最近接到一个业务自行运维的MySQL库迁移至标准化环境的需求&#xff0c;库不大&#xff0c;迁移方式也很简单&#xff0c;由开发用myqldump导出数据、DBA导入&#xff0c;但迁移过程坎坷十足&#xff0c;记录一下遇到的各项报错及后续迁移注意事项。 一、 概要 空间问题源与目…...

OpenCv之简单的人脸识别项目(人脸提取页面)

人脸识别 准备五、人脸提取页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.定义单人脸提取脚本4.定义多人脸提取脚本5.创建一个退出对话框6.按钮设计6.1单人脸提取按钮6.2多人脸提取按钮6.3返回按钮 7.定义关键函数8…...

linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等

一、背景 Linux内核是整个Linux操作系统的核心部分&#xff0c;它是一个负责与硬件直接交互的软件层&#xff0c;并且提供多种服务和接口&#xff0c;让用户程序能够方便地使用硬件资源。 当我们编译自定义内核时&#xff0c;可以将其生成为以下内核映像之一&#xff1a;vmli…...

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ 事件类型 ■ ■ input 子系统简介 input 子系统就是管理输入的子系统&#xff0c; input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层&#xff0c;最终给用户空间提供可访问的设备节点 …...

密码加密及验证

目录 为什么需要加密&#xff1f; 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密&#xff1f; 在MySQL数据库中&#xff0c;我们常常需要对用户密码、身份证号、手机号码等敏感信息进…...

找出字符串中出现最多次数的字符以及出现的次数

str.charAt(i) 是JavaScript中获取字符串中特定位置字符的方法&#xff0c;表示获取当前的字符。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…...

如何看待央行买卖长期国债?

央行远比大家想象中的要渴求货币宽松。 引子 今年以来&#xff0c;有不少关于“央行买卖长期国债”的讨论&#xff0c;前些时候关注点在“买”&#xff0c;最近关注点在“卖”。 然而&#xff0c;市场上的讨论采用了十分粗糙和松散的“自然语言”&#xff0c;所以&#xff0…...

MATLAB算法实战应用案例精讲-【数模应用】Turf组合模型(附MATLAB、python和R语言代码实现)

目录 几个高频面试题目 如何以最小的成本覆盖到最大的消费群体? 应用场景 TURF举例...

android源码下载编译模拟器运行

安卓aosp源码下载&#xff0c;编译&#xff0c;模拟器运行 virtualbox7 安装ubuntu20.04&#xff0c;ubuntu22.04 编译android aosp 源码可以&#xff0c;但是模拟器跑不了&#xff0c;哪个版本都是要么黑屏&#xff0c;要么整个vbox虚拟机闪退。解决方案使用vmware17 ##拯救…...

Golang:Sirupsen/logrus是一个日志库

Sirupsen/logrus是一个日志库 文档 https://github.com/Sirupsen/logrus 安装 go get github.com/sirupsen/logrus代码示例 package mainimport ("github.com/sirupsen/logrus" )func main() {var log logrus.New()log.Trace("Something very low level.&…...

Android Studio插件开发 - Dora SDK的IDE插件

IDE插件开发简介 Android Studio是一种常用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于开发Android应用程序。它提供了许多功能和工具&#xff0c;可以帮助开发人员更轻松地构建和调试Android应用程序。 如果你想开发Android Studio插件&#xff0c;以下是一…...

【mybatis】缓存

一级缓存和二级缓存 一级缓存是SqlSession级别的&#xff0c;通过同一个SqlSession查询的数据会被缓存&#xff0c;下次查询相同的数据&#xff0c;就会从一级缓存中直接获取&#xff0c;不会从数据库重新查询。一级缓存默认是开启 使一级缓存失效的四种情况&#xff1a; 11.1…...

自定义类型:结构体类型

在学习完指针相关的知识后将进入到c语言中又一大重点——自定义类型&#xff0c;在之前学习操作符以及指针时我们对自定义类型中的结构体类型有了初步的了解&#xff0c;学习了结构体类型的创建以及如何创建结构体变量&#xff0c;还有结构体成员操作符的使用&#xff0c;现在我…...

C++对象移动

在某些情况下,对象拷贝后就立即被销毁了,这时利用新标准(C11)提供的对象移动而非拷贝将大幅提升性能. 1.右值引用 为了支持移动操作,c11新增了一种引用 - 右值引用(rvalue reference)。这种引用必须指向右值,使用&&声明。 右值引用只能引用临时变量或常量值. 右值引用…...

“华为杯”第十三届中国研究生 数学建模竞赛-E题:粮食最低收购价政策问题研究(续)

目录 4.3 问题三:粮食价格的特殊规律性模型 4.3.1 分析和建模 4.3.2 求解和结果...

(一)django目录介绍

1、生成django项目&#xff0c;得到的目录如下 manage.py&#xff1a;命令行工具&#xff0c;内置多种方式与项目进行交互。在命令提示符窗口下&#xff0c;将路径切换到项目并输入python manage.py help,可以查看该工具的指令信息。 默认的数据库工具&#xff0c;sqlite 在…...

如何用btcrecover快速找回丢失的比特币钱包密码与助记词:完整指南

如何用btcrecover快速找回丢失的比特币钱包密码与助记词&#xff1a;完整指南 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance i…...

终极魔兽争霸3兼容性修复指南:5分钟让经典游戏在现代电脑上重生

终极魔兽争霸3兼容性修复指南&#xff1a;5分钟让经典游戏在现代电脑上重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代Win…...

chatgpt-web-midjourney-proxy的TypeScript类型系统:类型安全的AI应用开发

chatgpt-web-midjourney-proxy的TypeScript类型系统&#xff1a;类型安全的AI应用开发 在当今AI技术快速发展的时代&#xff0c;如何构建稳定可靠的AI应用成为开发者面临的重要挑战。chatgpt-web-midjourney-proxy项目通过精心设计的TypeScript类型系统&#xff0c;为开发者提供…...

Linux Capabilities(能力机制)细分学习

文章目录一. 网络相关 (Network)二. 系统与内核管理 (System & Kernel)三. 进程与信号管理 (Process & Signal)四. 文件系统与存储 (Filesystem & Storage)五. 审计与安全 (Audit & Security)六. IPC (进程间通信)七 在 Docker/K8s 中使用7.1. 只赋予网络管理能…...

[qemu+kvm]: smmu stage 2 建立流程

1. qemu倡导 gpa和hpa映射关系在vm建立时不确定&#xff0c;在运行时触发缺页异常后建立映射关系&#xff08;lazy binding&#xff09;。 2. smmu stage 2要求 gpa和hpa的映射关系在vm建立时确定&#xff0c;若在运行时触发缺页&#xff0c;会导致dma失败&#xff08;pcie ats…...

[特殊字符] 告别类名地狱!Tailwind CSS 语义化转换神器来了

痛点作为一名前端开发者&#xff0c;你是否早已受够了这些折磨&#xff1f;&#x1f62b; 代码可读性灾难 打开 HTML 文件&#xff0c;映入眼帘的是长达数十个类名的"怪物"&#xff1a;<div class"flex flex-col items-center justify-center bg-gray-100 ro…...

别光盯着分号!从C2143编译错误,聊聊C++预处理和语法解析那些事儿

别光盯着分号&#xff01;从C2143编译错误&#xff0c;聊聊C预处理和语法解析那些事儿 当你盯着屏幕上的C2143错误&#xff0c;反复检查分号却依然无解时&#xff0c;有没有想过编译器到底"看"到了什么&#xff1f;这个看似简单的语法错误背后&#xff0c;隐藏着从源…...

告别‘偏科’模型:用CAST双流架构搞定视频动作识别,兼顾时空理解

时空双流协同&#xff1a;CAST架构如何重塑视频动作识别的平衡之道 视频动作识别正面临一个关键瓶颈——现有模型往往在时空理解上"偏科"。就像人类大脑需要左右半球协同工作才能完整理解世界一样&#xff0c;理想的视频理解模型也需要同时具备敏锐的空间感知和精准的…...

SAP MIRO发票校验时,如何用增强LMR1M001自动检查供应商号?

SAP MIRO发票校验中供应商号自动检查的增强实战指南 在SAP系统中&#xff0c;发票校验(MIRO)是财务流程中的关键环节&#xff0c;而供应商号的准确性直接关系到后续的付款和账务处理。想象一下这样的场景&#xff1a;采购部门创建了一个采购订单&#xff0c;但财务人员在录入发…...

如何用LizzieYzy围棋AI分析工具快速提升棋力:新手完整指南

如何用LizzieYzy围棋AI分析工具快速提升棋力&#xff1a;新手完整指南 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 如果你正在寻找一款能够真正帮助提升围棋水平的AI分析工具&#xff0c;那么Li…...