我是GoLang和MongoDB的新手。我正在尝试使用mgo了解他们的关系。但是,我找不到有关如何使用mgo从Go中的mongo获取引用对象的合适示例。我听说过填充方法,但不知道mgo如何使用它。有人可以照亮吗?
答案 0 :(得分:0)
您的问题过于笼统,但是通常,如果您想通过单个查询获取“引用”对象,则必须使用MongoDB的Apache Groovy - Why and How You Should Use It,特别是Aggregation framework阶段。
可以通过lookup方法从mgo
使用聚合框架。
有关示例,请参见Collection.Pipe()
。
更多示例:
Get a value in a reference of a lookup with MongoDB and Golang
How to get the count value using $lookup in mongodb using golang?
答案 1 :(得分:0)
MongoDB提供$lookup
来执行左外部联接。以下是使用mgo的示例。
func TestLookup(t *testing.T) {
var err error
uri := "mongodb://localhost/stackoverflow?replicaSet=replset"
dialInfo, _ := mgo.ParseURL(uri)
session, _ := mgo.DialWithInfo(dialInfo)
c := session.DB("stackoverflow").C("users")
pipeline := `
[{
"$lookup": {
"from": "addresses",
"localField": "address_id",
"foreignField": "_id",
"as": "address"
}
}, {
"$unwind": {
"path": "$address"
}
}, {
"$project": {
"_id": 0,
"name": "$name",
"address": "$address.address"
}
}]
`
var v []map[string]interface{}
var results []bson.M
json.Unmarshal([]byte(pipeline), &v)
if err = c.Pipe(v).All(&results); err != nil {
t.Fatal(err)
}
for _, doc := range results {
t.Log(doc)
}
}