使用mgo存储嵌套结构

Verran:

我正在尝试从高度嵌套的go结构构建mongo文档,并且从go struct过渡到mongo对象遇到了问题。我已经在这里构建了一个非常简化的版本:http : //play.golang.org/p/yPZW88deOa

package main

import (
    "os"
    "fmt"
    "encoding/json"
)

type Square struct {
    Length int 
    Width int
}

type Cube struct {
    Square
    Depth int
}

func main() {
    c := new(Cube)
    c.Length = 2
    c.Width = 3
    c.Depth = 4

    b, err := json.Marshal(c)
    if err != nil {
        panic(err)
    }

    fmt.Println(c)
    os.Stdout.Write(b)
}

运行此命令将产生以下输出:

&{{2 3} 4}
{"Length":2,"Width":3,"Depth":4}

完全有道理。似乎Write函数或json.Marshal函数具有使折叠的struct折叠的功能,但是当我尝试使用mgo函数将此数据插入mongo数据库时,我的问题来了func (*Collection) Upserthttp://godoc.org/labix .org / v2 / mgo#Collection.Upsert)。如果我先使用该json.Marshal()函数并将字节传递给collection.Upsert(),则它会以二进制形式存储,这是我不想要的,但是如果使用collection.Upsert(bson.M("_id": id, &c)它,它将显示为嵌套结构,其形式为:

{
    "Square": {
        "Length": 2
        "Width": 3
    }
    "Depth": 4
}

但是我想要做的是使用与使用该os.Stdout.Write()函数时相同的结构来向mongo上插入

{
     "Length":2,
     "Width":3,
     "Depth":4
}

我是否缺少一些可以轻松解决此问题的标志?在这一点上,我能看到的唯一选择是通过删除结构的嵌套来严重降低代码的可读性,而我真的很讨厌这样做。同样,我的实际代码比本示例要复杂得多,因此,如果我可以避免通过嵌套嵌套而使其更加复杂,那绝对是可取的。

阿尼斯:

我认为使用inline字段标签是您的最佳选择。氧化镁/ V2 / BSON文档状态:

inline     Inline the field, which must be a struct or a map,
           causing all of its fields or keys to be processed as if
           they were part of the outer struct. For maps, keys must
           not conflict with the bson keys of other struct fields.

然后,您的结构应定义如下:

type Cube struct {
    Square `bson:",inline"`
    Depth  int
}

编辑

inlinemgo/v1/bson如果您正在使用那个,也存在

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么元帅无法使用嵌套结构?

来自分类Dev

使用gorm模型的嵌套结构

来自分类Dev

使用new初始化嵌套结构

来自分类Dev

使用Golang在MongoDb中插入嵌套结构

来自分类Dev

golang:使用嵌套结构

来自分类Dev

使用Go在GAE数据存储上的嵌套结构

来自分类Dev

在模块的嵌套结构中“使用”内部模块及其符号

来自分类Dev

使用C修改嵌套结构的数据

来自分类Dev

在嵌套结构上免费使用

来自分类Dev

使用嵌套结构作为输入参数的Spark UDF

来自分类Dev

如何检查本地git存储库的嵌套结构

来自分类Dev

使用外部函数获取和设置嵌套结构的值

来自分类Dev

在流中使用嵌套结构中的吸气剂

来自分类Dev

使用pyparsing时,如何忽略嵌套结构?

来自分类Dev

如何使用嵌套结构管理SwiftUI状态?

来自分类Dev

使用偏移量访问嵌套结构

来自分类Dev

C ++使用外部嵌套结构实现类函数

来自分类Dev

使用指针访问嵌套结构中的数据

来自分类Dev

C#WPF使用ItemsControl管理嵌套结构

来自分类Dev

嵌套结构连接

来自分类Dev

了解嵌套结构

来自分类Dev

在嵌套结构中使用SASS / SCSS更改.js类

来自分类Dev

编组嵌套结构

来自分类Dev

使用Spark StructType支持嵌套结构

来自分类Dev

使用嵌套结构在 Swift 中解码深度嵌套的对象

来自分类Dev

获取嵌套结构

来自分类Dev

使用反射读取嵌套结构

来自分类Dev

分配嵌套结构

来自分类Dev

使用 Swift 将 Json 解析为嵌套结构