Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mgo中的模型关系_Go_Bson_Mgo - Fatal编程技术网

mgo中的模型关系

mgo中的模型关系,go,bson,mgo,Go,Bson,Mgo,我正在用mgo编写一个db接口。 我的模型中的一些文档引用了其他文档 type Child struct{ Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"` C string } type Parent struct { Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"` A

我正在用mgo编写一个db接口。 我的模型中的一些文档引用了其他文档

type Child struct{
    Id       bson.ObjectId   `json:"_id,omitempty" bson:"_id,omitempty"`
    C        string
}

type Parent struct {
    Id       bson.ObjectId   `json:"_id,omitempty" bson:"_id,omitempty"`
    A        string          
    B        Child           
}

child := Child{
    Id: bson.NewObjectId(),
    C: "panino"
}

parent := Parent{
    Id: bson.NewObjectId(),
    A: "Just a string",
    B: child,
}
我的目标是:

  • 将这些文档嵌入代码中
  • 将父项存储在父项集合中,仅引用子项
  • 将子项作为独立文档存储在子项集合中 以下是:

    type Child struct{
        Id       bson.ObjectId   `json:"_id,omitempty" bson:"_id,omitempty"`
        C        string          `bson:"-"`
    }
    
    在1和2中成功,但只有child.Id存储在Children集合中。 我对Golang/mgo很陌生。我玩了一些封送和解封,但我不太明白Getter和Setter是如何工作的。不过我觉得他们会耍花招。
    有什么线索吗?

    您可能正在查找
    bson:,省略空的“
    标记,而不是
    bson:“-”
    。前者只有在字段为空时才会忽略该字段,而不是始终忽略该字段。或者,您还可以拥有仅用于引用的辅助
    ChildReference
    类型。在同一个集合中使用不同的类型是可以的


    另外,请注意,尽管这种做法在某些情况下使用,但在所有情况下都不必将集合名称存储在文档id旁边。对于定义良好的模式,最常见的做法是只存储文档id(例如,使用
    {“person\u id”:123}
    含义很清楚)。

    结构标记
    bson:“-”
    告诉bson忽略Child的C字段。这是一个问题,因为Child也必须作为独立文档存储。