Go MongoDB Driver 中的 A D M E 类型是什么

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Go MongoDB Driver 中的 A D M E 类型是什么

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

先看看源码

// D is an ordered representation of a BSON document. This type should be used when the order of the elements matters,
// such as MongoDB command documents. If the order of the elements does not matter, an M should be used instead.
//
// Example usage:
//
//    bson.D{{"foo", "bar"}, {"hello", "world"}, {"pi", 3.14159}}
type D = primitive.D
// E represents a BSON element for a D. It is usually used inside a D.
type E = primitive.E
// M is an unordered representation of a BSON document. This type should be used when the order of the elements does not
// matter. This type is handled as a regular map[string]interface{} when encoding and decoding. Elements will be
// serialized in an undefined, random order. If the order of the elements matters, a D should be used instead.
//
// Example usage:
//
//    bson.M{"foo": "bar", "hello": "world", "pi": 3.14159}
type M = primitive.M
// An A is an ordered representation of a BSON array.
//
// Example usage:
//
//    bson.A{"bar", "world", 3.14159, bson.D{{"qux", 12345}}}
type A = primitive.A

在 Go MongoDB Driver 中,我们调用 MongoDB Driver 提供的方法的时候,往往需要传入 bson.D, bson.A, bson.M, bson.A 这几种类型。

bson.D

用来表示一个有序的 BSON 文档,当我们需要传递一些有序的参数的时候可以使用,比如 MongoDB 中的聚合操作,聚合操作往往是一组操作的集合,比如先筛选、然后分组、然后求和,这个顺序是不能乱的。

bson.E

用来表示 bson.D 中的一个属性,类型定义如下:

// E represents a BSON element for a D. It is usually used inside a D.
type E struct {
  Key   string
  Value interface{}
}

可以类比 json 对象里面的某一个属性以及其值。

为什么不是 bson.M 中的属性呢?

首先,bson.M 其实是一个 map,不接受这种类型,bson.D 实际上是 []bson.E 类型,是 bson.E 的切片。

其次,bson.M 里面是顺序无关的,普通的 map 就已经足够了,没必要再定义一个类型。

bson.M

用来表示无需的 BSON 文档,就是一个普通的 map 类型。在保存到 MongoDB 中的时候,字段顺序是不确定的,而 bson.D 的顺序是确定的。

顺序可能大部分情况都是不需要的。不过在匹配嵌套的 BSON 数组文档的时候,可能会有问题。但还是有其他的解决办法的。

可参考本站的: MongoDB $elemMatch 操作符

bson.A

用来表示 BSON 文档中的数组类型,是有序的。


目录
相关文章
|
4月前
|
存储 JSON Go
Go语言之空接口与类型断言
本文介绍了 Go 语言中空接口(`interface{}`)和类型断言的核心概念及其应用。空接口可存储任意类型数据,适用于通用函数、动态数据结构与 JSON 解析等场景;类型断言用于将接口变量还原为具体类型,推荐使用带 `ok` 的写法以避免程序崩溃。此外,文章通过示例讲解了 `type switch` 类型判断与 JSON 处理技巧,并总结了空接口的注意事项,强调滥用可能导致类型安全性降低。内容深入浅出,帮助开发者灵活运用这些特性。
111 15
|
4月前
|
算法 Go
Go语言模拟集合类型-《Go语言实战指南》
在 Go 语言中,虽然没有内建的集合(Set)类型,但可以通过 `map` 实现其功能。常用方式包括 `map[T]bool` 和更节省内存的 `map[T]struct{}`。前者以布尔值表示元素存在性,后者利用零内存开销的空结构体。文章介绍了集合的基本操作(添加、删除、判断、遍历),并通过封装示例展示如何创建自定义 Set 类型。这种实现方式适用于去重、唯一标记及集合运算等场景,简洁高效且易于扩展。
|
6月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引的类型
本节介绍了MongoDB中索引的几种类型及其特点。包括单字段索引,支持升序/降序排序,索引顺序对操作无影响;复合索引,字段顺序重要,可实现多级排序;地理空间索引,支持平面与球面几何查询;文本索引,用于字符串搜索并存储词根;哈希索引,基于字段值散列,适合等值匹配但不支持范围查询。
177 1
微服务——MongoDB常用命令——MongoDB索引的类型
|
7月前
|
存储 算法 Go
Go语言实战:错误处理和panic_recover之自定义错误类型
本文深入探讨了Go语言中的错误处理和panic/recover机制,涵盖错误处理的基本概念、自定义错误类型的定义、panic和recover的工作原理及应用场景。通过具体代码示例介绍了如何定义自定义错误类型、检查和处理错误值,并使用panic和recover处理运行时错误。文章还讨论了错误处理在实际开发中的应用,如网络编程、文件操作和并发编程,并推荐了一些学习资源。最后展望了未来Go语言在错误处理方面的优化方向。
|
JSON 安全 前端开发
类型安全的 Go HTTP 请求
类型安全的 Go HTTP 请求
|
10月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
253 4
|
10月前
|
Go
go语言常量的类型
【10月更文挑战第20天】
92 2
|
人工智能 NoSQL Go
Go MongoDB Driver 实例
Go MongoDB Driver 实例
74 1
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
安全 Go

推荐镜像

更多