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

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

需要在 MongoDB 和 golang(mgo) 中包含 $each 和 $position

需要在 MongoDB 和 golang(mgo) 中包含 $each 和 $position

Go
楊__羊羊 2022-03-03 16:11:32
1.在后端我使用go lang,對于數據庫我使用mongoDB。我試圖找到插入到嵌入數組中的最后一個文檔,這樣我就可以在不知道它的索引的情況下檢索最后一個數組索引中的文檔。有可能嗎?在對此進行研究后,我知道這是不可能的。所以我正在考慮使用 $push、$each 和 $position。在這里我可以將位置設置為 0,這樣新添加的文檔將在 0 中,這樣我就可以使用它來檢索它索引 0。  Here is bson format    {    empid:"L12"    AnnualLeave:[        {        "atotal" : 20,        }    ]    } Here is my schema type (            Employee struct {                EmpId          string                AnnualLeave    []*AnnualLeaveInfo            }             AnnualLeaveInfo struct {                ATotal          int64               }        I use the mgo statement as follows`enter code here` c.Update(bson.M{"empid": "string"}, bson.M{"$push": bson.M{"annualleave":bson.M{"$each":         bson.M{"atotal": 4},"$position":0}}2.請告訴我如何減少所附上一個文件的ATotal,并將其保留為新文件的總價值。請幫助我。謝謝
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

我試圖找到嵌入數組中插入的最后一個文檔,這樣我就可以在不知道它的索引的情況下檢索最后一個數組索引中的文檔。有可能嗎?


您可以通過從數組長度派生來找到最后一個數組索引。使用您的示例:


type Employee struct {

        EmpId string 

        AnnualLeave []AnnualLeaveInfo

}

type AnnualLeaveInfo struct {

        ATotal int64

}


result := Employee{}

err = c.Find(bson.M{"empid": "example employee ID"}).One(&result)

if err != nil {

        log.Fatal(err)

}

lastAnnualTotal:= result.AnnualLeave[len(result.AnnualLeave)-1].ATotal

請告訴我如何減少ATotal所附上一個文件的值并將其保留為新文件的總價值


根據您的用例,您可以嘗試執行兩個數據庫操作:


ATotal從集合中獲取最后一個值。

推送具有新值的新AnnualLeaveInfo文檔。ATotal

// Assuming that EmpId is unique

err = c.Update(bson.M{"empid": result.EmpId},

      bson.M{"$push": bson.M{"annualleave": bson.M{"atotal": int(latestAnnualTotal-1)}}})

如果您需要原子更新,請參閱MongoDB 原子性和事務以及用于原子操作的模型數據。


另一方面,您似乎正在嘗試做一些與CQRS 設計模式相關的事情。此設計模式可能有助于計算您的年假用例。另請參閱使用 MongoDB 進行采購


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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