我正在尝试插入数据并使用 mongo go 驱动程序从 mongodb 读取该数据。我正在使用一个具有数据字段的结构。当我使用数据类型作为接口时,我会得到多个映射,当我将其指定为映射切片时,它会返回单个映射。 mongodb 中的数据类似。
package main import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) type Host struct { Hostname string `bson:"hostname"` Data []map[string]interface{} `bson:"data"` //return single map // Data interface{} `bson:"data"` //returns multiple maps } func main() { // Set up a MongoDB client clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") client, err := mongo.Connect(context.Background(), clientOptions) if err != nil { panic(err) } // Set up a MongoDB collection collection := client.Database("testdb").Collection("hosts") // Create a host object to insert into the database host := Host{ Hostname: "example.com", Data: []map[string]interface{}{ {"key1": "using specific type", "key2": 123}, }, } // Insert the host object into the collection _, err = collection.InsertOne(context.Background(), host) if err != nil { panic(err) } // Query the database for the host object filter := bson.M{"hostname": "example.com"} var result Host err = collection.FindOne(context.Background(), filter).Decode(&result) if err != nil { panic(err) } // Print the host object fmt.Println(result) }
仅使用接口时
当使用地图切片时
两种情况下存储的数据相似。
为什么当我们尝试访问数据时会出现数据差异?
正确答案
当您使用 interface{}
时,这意味着您将由驱动程序来选择它认为最能代表从 mongodb 到达的数据的任何数据类型。
当您使用 []map[string]interface{}
时,您明确表示您想要一个地图切片,其中每个地图可以代表一个文档。
当您使用 interface{}
时,您什么也不说。驱动程序将选择 bson.a
来表示数组,并选择 bson.d
时,您什么也不说。驱动程序将选择 bson.a
来表示数组,并选择
bson.a
a> 只是一个 [] 接口{}
,并且 bson.d
是 []e
其中 e
type e struct { key string value interface{} }
bson.d
所以基本上 是键值对(属性)的有序列表。
interface{}
时,您会得到一片切片,而不是多个地图。不打印类型信息,fmt
因此,当您使用
fmt
包打印切片和地图,两者都括在方括号中。如果您想查看类型,请像这样打印:
fmt.printf("%#v\n", result.data)
[]map[string]接口{}
使用时的输出:
[]map[string]interface {}{map[string]interface {}{"key1":"using specific type", "key2":123}}
interface{}
使用 时的输出:🎜
primitive.A{primitive.D{primitive.E{Key:"key1", Value:"using specific type"}, primitive.E{Key:"key2", Value:123}}}
以上是mongogo 驱动程序中的 Mongodb 存储和检索的详细内容。更多信息请关注PHP中文网其他相关文章!

如何更改文件类型为ini随着计算机的普及和应用软件的多样化,我们经常会遇到需要更改文件类型的情况。其中,将文件类型更改为.ini文件是一种常见的操作。本文将介绍如何简单快捷地将文件类型更改为.ini。首先,我们需要明确.ini文件的特点和用途。.ini文件是一种用于存储配置信息的文本文件。它通常以.ini作为扩展名,并包含键值对的形式。通过修改.ini文件中

我正在尝试使用sqlmodel在数据库中插入记录,其中数据如下所示。一个house对象,它有颜色和许多位置。地点也将与许多房屋相关联。输入为:[{"color":"red","locations":[{"type":"country","name":"netherlands"},{"type":"municipality","name":"amsterdam"},

我有一个用例,我们在x-www-form-urlencoded主体中获取嵌套键值,如下所示name=abc&age=12¬es[key1]=value1¬es[key2]=value2我尝试了url.parsequery("name=abc&age=12¬es\[key1\]=value1¬es\[key2\]=value2")但它给出了{"name":"abc","age":12,"notes[key1]":"value1","note

如何在go中编写一个函数,将任何map转换为对象列表(删除键)?例如:funcmaptolist(inputmapmap[any]any)any{varresultlist[]anyfor_,obj:=rangeinputmap{resultlist=append(resultlist,obj)}returnresultlist}funcmain(){mymap:=make(ma

php数组键值对是一种数据结构,由一个键和一个相应的值组成,键是数组元素的标识符,而值是与键相关联的数据。允许我们以键为标识来存储和访问数据,通过使用键值对,可以更方便地操作和管理数组中的元素,使得程序开发更加灵活和高效。

什么是枚举类型?枚举类型(enum)是Java编程语言中的一种特殊数据类型,用于表示一组预定义的常量。枚举类型中的每个常量都代表该类型的一个可能值。如何使用枚举类型设置值?要使用枚举类型设置值,可以使用枚举类型的常量。枚举类型的常量可以通过点运算符(.)访问。例如,如果有一个名为Color的枚举类型,其中包含三个常量:RED、GREEN和BLUE

Python底层技术揭秘:如何实现哈希表哈希表是在计算机领域中十分常见且重要的数据结构,它可以高效地存储和查找大量的键值对。在Python中,我们可以使用字典来使用哈希表,但是很少有人深入了解它的实现细节。本文将揭秘Python中哈希表的底层实现技术,并给出具体的代码示例。哈希表的核心思想是将键通过哈希函数映射到一个固定大小的数组中,而不是简单地按顺序存储。

Redis键值对操作在Java开发中的应用:如何快速存取数据在Java开发中,数据的存取操作是一项非常重要的任务。如何快速、高效地存取数据是开发者所关注的一个重点问题。而Redis作为一种高性能的内存数据库,具备快速读写操作的特点,因此在Java开发中被广泛应用于数据缓存和存储实现。Redis是一个支持键值对存取的内存数据库。它将数据存储在内存中,因此数据的


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),