1.在后端我使用go lang和数据库我使用mongoDB。我试图找到嵌入数组中插入的最后一个文档,这样我就可以在不知道其索引的情况下检索最后一个数组索引中的文档。这是可能的吗? 在研究了这个之后,我才知道它不可能。所以我想使用$ push,$ each和$ position.Here我可以将位置设置为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,并将其保留为新文件的总值。 请帮帮我。谢谢
答案 0 :(得分:1)
我试图找到嵌入数组中插入的最后一个文档,这样我就可以在不知道索引的情况下检索最后一个数组索引中的文档。这是可能的吗?
您可以通过从数组长度中获取最后一个数组索引。使用您的示例:
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)}}})
如果您需要原子更新,请参阅Model Data for Atomic Operations和CQRS design patterns。
另一方面,您似乎正在尝试执行与Even Sourcing with MongoDB相关的操作。这种设计模式可能有助于计算年假用例。另请参阅{{3}}