当前位置: 首页 > 面试题库 >

使用mgo的非结构化MongoDB集合

太叔富
2023-03-14
问题内容

我很新。从我在mGo的示例中所看到的,要查询一个集合然后从中读取,您必须预先定义将要返回到结构中的数据。

type Person struct {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name      string
    Phone     string
    Timestamp time.Time
}

在PHP中,文档被分配给一个数组。这很完美,因为一条记录可能具有完全不同的键集(可能不包含名称或电话,但包含电子邮件),而且我可以直接访问它而无需设置预定义的类/结构/变量。

在Go / mGo中有没有办法做到这一点?


问题答案:

您可以通过多种方式来处理此问题。

使用地图:

var m bson.M
err := collection.Find(nil).One(&m)
check(err)
for key, value := range m {
    fmt.Println(key, value)
}

请注意,就mgo而言,bson.M没什么特别的。这只是一种map[string]interface{}类型,您可以定义自己的地图类型并将其与mgo一起使用,即使它们具有不同的值类型也是如此。

使用文档切片:

的bson.D是内部称为成MgO的切片,并且它的存在既能够提供更为有效的机制,并提供了一种方法以保留密钥的排序,这是在某些情况下使用的MongoDB(例如,定义当索引)。

例如:

var d bson.D
err := collection.Find(nil).One(&d)
check(err)
for i, elem := range d {
    fmt.Println(elem.Name, elem.Value)
}

使用内嵌地图字段

,inlineBSON
标志也可以在地图领域中使用,这样就可以有你的蛋糕和熊掌兼得。换句话说,它可以使用结构,从而方便处理已知字段,同时允许通过内联映射处理未知字段。

例如:

type Person struct {
    ID        bson.ObjectId `bson:"_id,omitempty"`
    Name      string
    Phone     string
    Extra     bson.M `bson:",inline"`
}


 类似资料:
  • 问题内容: 我正在尝试从高度嵌套的go结构构建mongo文档,并且从go struct过渡到mongo对象遇到了问题。我已经在这里构建了一个 非常 简化的版本:http : //play.golang.org/p/yPZW88deOa 运行此命令将产生以下输出: 完全有道理。似乎Write函数或json.Marshal函数都具有折叠嵌套结构的某些功能,但是当我尝试使用mgo函数将此数据插入到mon

  • 本文向大家介绍结构化,半结构化和非结构化数据之间的差异,包括了结构化,半结构化和非结构化数据之间的差异的使用技巧和注意事项,需要的朋友参考一下 在大数据方面,我们知道它处理大量数据及其执行。简而言之,我们可以说大数据是一种处理大量数据的事物,并且由于数据量如此之大,因此从广义上讲,根据数据的组织方式定义了三类,即结构化,半结构化和非结构化数据。 现在,根据组织数据的级别,我们可以发现这三种类型的数

  • 问题内容: 我正在通过mgo运行地图缩减任务。它运行在具有超过350万条记录的集合上。由于某些原因,我现在无法将此端口移植到聚合中。可能会晚一些。因此,map- reduce是我期待的事情。当我从为测试代码和输出而创建的原始js文件运行该作业时,它运行良好。我试图将地图和减少代码放在两个字符串中,然后尝试调用mgo.MapReduce为我做地图减少,以便在其他集合中编写输出。它给了我 读取TCP

  • 问题内容: 在MongoDB中,执行类似的操作将返回集合中的所有文档。 当使用包 **labix.org/v2/mgo** 在GoLang中工作时,例如,我这样做: 它抱怨它需要以接口形式输入。我需要做的就是检索所有文档并遍历它们,并立即显示每个文档。如何达到此效果?我所看到的所有示例似乎都已安装了过滤器。 问题答案: 找到了解决方案:

  • 问题内容: 有人知道我们在mongodb shell中对golang mgo / bson使用的聚合命令等效吗? 像这样: 问题答案: 假设这是您的收藏夹: GoDoc参考: Collection.Pipe文档 管道及其方法

  • 商店1 第1节 第2节 2号商店 null null null 我会在'store'属性中设置区段,因为不同的商店有不同的区段。 到目前为止我认为一切都是正确的。我的问题是如何将用户分配到商店中的特定区段。会是user.company.store[3].section[1]吗?如果一个节/存储区被删除,那么节/存储区的indexOf值不会改变吗?人们通常是怎么做这样的事情的?我基本上是在创建与文件