学习mongo和go

mongo:

moduleData, ok := result.Lookup("context1", "context2").DocumentOK()

 

  1. result.Lookup("context1", "context2") 用于检索名为 "content1" 的字段,并且该字段的值又是一个嵌套的文档,我们希望进一步获取其中名为 "content2" 的字段。

  2. .DocumentOK():这部分是将嵌套的文档提取出来,并且通过第二个返回值 ok 指示是否成功找到了该嵌套文档。

最终,moduleData 将包含名为 "moduleData" 的嵌套文档的值,而 ok 将指示是否成功找到了该嵌套文档。

 

options.FindOne().SetProjection(projection) 

filter := bson.M{"name": "Alice"}

// 设置投影,只包含 name 和 age 字段,不包含 email 字段

projection := bson.M{"name": 1, "age": 1, "email": 0}

在 MongoDB Go 驱动中,options.FindOne().SetProjection(projection) 用于设置查询的投影(Projection),而 .DecodeBytes() 方法则用于将查询结果解码为字节切片([]byte)。

  1. 不使用 .DecodeBytes()
go
var result Person
err := collection.FindOne(context.TODO(), filter, findOptions).Decode(&result)

在这种情况下,我们将查询结果解码为 Person 类型的对象:

go
type Person struct {
	Name string
	Age  int
}

结果将被赋值给 result 变量,并可以直接访问其字段:

go
fmt.Println(result.Name) // 输出: Alice
fmt.Println(result.Age)  // 输出: 25
  1. 使用 .DecodeBytes()
go
var result []byte
err := collection.FindOne(context.TODO(), filter, findOptions).DecodeBytes(&result)

在这种情况下,我们将查询结果解码为字节切片([]byte):

go
fmt.Println(string(result)) // 输出: {"name":"Alice","age":25}


Unmarshal

假设 Data 是一个 MongoDB 文档对象,并且其中包含了名为 "AData" 的字段。代码的执行过程如下:

  1. Data.Lookup("AData"):这部分调用是用于查找名为 "AData" 的字段,并返回它的值。前提是 Data 是一个 BSON 文档对象。

  2. .Unmarshal(&aData):这部分是将上一步得到的 "AData" 字段的值解析为 aData 对象。&aData 是一个指向 aData 变量的指针,这样解析后的结果将会被存储在 aData 变量中。

需要确保 aData 的类型与解析结果匹配,这样解析过程才能成功。通常情况下,你需要定义一个结构体来表示 a的数据结构,然后将其作为解析的目标。

 
posted @   爱喝崂山可乐  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示