亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何執行僅獲取第一個元素的查找

如何執行僅獲取第一個元素的查找

Go
慕容708150 2022-06-27 17:27:32
我有這兩個結構:Category struct {    ID           primitive.ObjectID `bson:"_id"`    Name         string             `bson:"name"`}Book struct {    ID           primitive.ObjectID `bson:"_id"`    Name         string             `bson:"name"`    Category     *Category          `bson:"category"`}我想找到一本匯總其類別的書并執行此查詢// lookup stagelookupStage := bson.D{{"$lookup", bson.D{    {"from", "category"},    {"localField", "category"},    {"foreignField", "_id"},    {"as", "category"}}}}通過此查找,我會將獲取的類別文檔放入圖書的類別字段中。// match stage (cut for simplicity, it doesn't care)var matchStage bson.D = ...pipeline := mongo.Pipeline{    matchStage,    lookupStage,}cur, err := bookCollection.Aggregate(context.TODO(), pipeline)cur.Decode(&book)如果我直接在 MongoDB 中執行查詢一切正常,但在 Go 中我得到一個空類別。我認為問題在于查找返回一個數組但我試圖將它映射到一個對象上。所以問題是:如何獲取查找操作產生的數組的第一個元素并將其放置在 book 實例中?我正在使用 mongo 官方驅動程序。
查看完整描述

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. 這將簡化很多查詢,因為圖書類別可能是圖書的重要信息。


查看完整回答
反對 回復 2022-06-27
  • 1 回答
  • 0 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號