【发布时间】:2018-12-29 12:12:51
【问题描述】:
在这个example 中,我将Sql driver 更改为mgo,我有些困惑。在这里,如何访问内部结构值?像嵌套结构。
我有两个结构,
作者
type Author struct {
ID string `bson:"id"`
Name string `bson:"name"`
Timestamp time.Time
}
文章
type Article struct {
ID bson.ObjectId `bson:"_id,omitempty"`
Title string `bson:"title"`
Content string `bson:"content"`
Author Author `bson:"inline"`
Timestamp time.Time
}
功能
func (m *mgoArticleRepository) FindAll() ([]*models.Article, error) {
result := make([]*models.Article, 0)
sessionCopy := m.Conn.Copy()
defer sessionCopy.Close()
collection := sessionCopy.DB(DBNAME).C(COLLECTION)
err := collection.Find(nil).All(&result)
return result, err
}
输出
作者对象返回空(我在 mongoDB 中有数据)
[
{
"ID":"5b4f27c187a9e40828422cca",
"Title":"Makan Ayam",
"Content":"Sample values One",
"Author":{
"ID":"",
"Name":"",
"Timestamp":"0001-01-01T00:00:00Z"
},
"Timestamp":"0001-01-01T00:00:00Z"
},
{
"ID":"5b4f27c187a9e40828422ccb",
"Title":"Makan Ikan",
"Content":"Sample values Two",
"Author":{
"ID":"",
"Name":"",
"Timestamp":"0001-01-01T00:00:00Z"
},
"Timestamp":"0001-01-01T00:00:00Z"
},
{
"ID":"5b4f27c187a9e40828422ccc",
"Title":"Makan Sayur",
"Content":"Sample values Three",
"Author":{
"ID":"",
"Name":"",
"Timestamp":"0001-01-01T00:00:00Z"
},
"Timestamp":"0001-01-01T00:00:00Z"
},
{
"ID":"5b4f27c187a9e40828422ccd",
"Title":"Makan Daging",
"Content":"Sample values Four",
"Author":{
"ID":"",
"Name":"",
"Timestamp":"0001-01-01T00:00:00Z"
},
"Timestamp":"0001-01-01T00:00:00Z"
},
{
"ID":"5b4f27c187a9e40828422cce",
"Title":"Makan Indomie",
"Content":"Sample values Five",
"Author":{
"ID":"",
"Name":"",
"Timestamp":"0001-01-01T00:00:00Z"
},
"Timestamp":"0001-01-01T00:00:00Z"
},
{
"ID":"5b4f27c187a9e40828422ccf",
"Title":"Makan Soto",
"Content":"Sample values Six",
"Author":{
"ID":"",
"Name":"",
"Timestamp":"0001-01-01T00:00:00Z"
},
"Timestamp":"0001-01-01T00:00:00Z"
}
]
在这里,我怎样才能为两个结构建立关系?谢谢。
【问题讨论】:
-
如果您将 MongoDB 视为 RDBMS 的替代品,您将会遇到问题。使用现有模型并在 MongoDB 中使用它们很有可能会失败。在 SQL 中,您尝试根据相对严格的建模找出如何回答您的问题。对于一般的 NoSQL,尤其是 MongoDB,您可以对数据进行建模,以便以最有效的方式回答您的问题。微妙但重要的区别。
-
我们能否提供您存储数据的样本,而不仅仅是调用返回的数据?