首页 > 其他分享 >学习mongo和go

学习mongo和go

时间:2023-11-22 18:14:34浏览次数:25  
标签:mongo 学习 嵌套 文档 result go aData name

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的数据结构,然后将其作为解析的目标。

 

标签:mongo,学习,嵌套,文档,result,go,aData,name
From: https://www.cnblogs.com/zhengyb-bolg/p/17849967.html

相关文章

  • Django11days
    Cookie和session发展史cookie补充django操作cookiesessiondjango操作session三种方法———————————————————————————————————————————————————————————————————————————————————————......
  • 2023.11.22学习笔记(2)
    跳石头P2678[NOIP2015提高组]跳石头-洛谷|计算机科学教育新生态(luogu.com.cn)佬啊佬啊,我的思路:用数组b去储存它的差分,每一次找到它的最小值,将最小值和它旁边的较小的那个值合并,边界的话就直接合并,总计进行m次合并操作,这个时候再找到它的最小值,就是答案但是如果是枚举......
  • 算法学习笔记(40): 具体数学
    具体数学本文是阅读《具体数学》产生的理解性文本,并且涵盖了部分其他相关的内容。不怎么重要或者太难的东西因为时间问题,我略过了。本文来之不易,请勿机械搬运:原文地址-https://www.cnblogs.com/jeefy/p/17848037.html目录具体数学第二章-和式和式的处理有限微积分分部求和......
  • 设计模式学习每日总结-第十天
    第十天装饰模式:动态地给一个对象增加额外职责。有点:更灵活地增加子类缺点:小子类多,占资源  ......
  • Django 修改默认外键关联到其他字段
    默认值关联classOrg(models.Model):"""组织架构"""name=models.CharField("组织机构名称",max_length=100,default='')pid=models.ForeignKey('self',verbose_name="上级",on_dele......
  • Grafana学习(9)—— Alerting - Alerting on numeric data
    ThistopicdescribeshowGrafanamanagedalertsareevaluatedbythebackendengineaswellashowGrafanahandlesalertingonnumericratherthantimeseriesdata.本主题介绍Grafana管理的警报如何由后端引擎评估,以及Grafana如何处理数字而非时间序列数据的警报。......
  • 11.21学习小结 //LCA
    倍增求LCA参考博文:https://www.cnblogs.com/hulean/p/11144059.html参考博文:https://www.cnblogs.com/jvxie/p/4854719.html·记录每个点的深度,和往前2^i的祖先。·先把两个点提到同一高度,再统一开始跳。不可以直接跳到相同祖先处,因为可能是LCA的祖先·裸板子:洛谷P3379wa......
  • 大模型训练中的学习率调整策略
    随着人工智能的快速发展,深度学习已经成为了许多领域的重要工具。然而,深度学习的成功很大程度上取决于如何调整训练过程,这其中,学习率是一个至关重要的参数。本文将探讨深度学习学习率对模型训练的影响,以及如何选择和调整学习率以优化模型性能。首先,我们需要理解什么是深度学习学习率......
  • Grafana学习(7)——Alerting
    GrafanaAlertingallowsyoutolearnaboutproblemsinyoursystemsmomentsaftertheyoccur.MonitoryourincomingmetricsdataorlogentriesandsetupyourAlertingsystemtowatchforspecificeventsorcircumstancesandthensendnotificationswhen......
  • 基于go-zero的api网关示例
    以下是基于go-zero框架的API网关示例。这个示例包括一个简单的API网关,它接收HTTP请求,将请求路由到不同的服务,并返回响应。创建项目首先,在go-zero仓库中创建一个新的目录:mkdirapi-gatewaycdapi-gateway创建Go文件在api-gateway目录下创建以下三个文件:c......