1 回答

TA貢獻1802條經驗 獲得超10個贊
如果我直接在 MongoDB 中執行查詢一切正常,但在 Go 中我得到一個空類別。我認為問題在于查找返回一個數組但我試圖將它映射到一個對象上。
$lookup階段確實返回一個數組,但如果這是您的問題,您可能會收到一個錯誤,例如cannot decode array into a Category. 它可能是由其他原因引起的,下面的答案將顯示一個工作示例,希望也能幫助您解決問題。
這里有兩種選擇,具體取決于您的用例。首先是聲明Category為數組,即
type Book struct {
ID primitive.ObjectID `bson:"_id"`
Name string `bson:"name"`
Category []*Category `bson:"category"`
}
其次,您可以利用$unwind階段來刪除陣列。例如:
collection := client.Database("go").Collection("book")
lookupStage := bson.D{{"$lookup", bson.D{
{"from", "category"},
{"localField", "category"},
{"foreignField", "_id"},
{"as", "category"}}}}
unwindStage := bson.D{{"$unwind", "$category"}}
pipeline := mongo.Pipeline{lookupStage, unwindStage}
cursor, err := collection.Aggregate(context.TODO(), pipeline)
defer cursor.Close(context.TODO())
if err != nil {
panic(err)
}
cursor.Next(context.TODO())
var book Book
err = cursor.Decode(&book)
if err != nil {
panic(err)
}
fmt.Println(book)
說了以上所有內容,根據您的用例,您應該重新考慮架構。假設圖書類別不會經常更改,您可以將其嵌入Category到Book. 這將簡化很多查詢,因為圖書類別可能是圖書的重要信息。
- 1 回答
- 0 關注
- 133 瀏覽
添加回答
舉報