gpt4 book ai didi

MongoDB 更新最新的子文档

转载 作者:可可西里 更新时间:2023-11-01 09:28:47 24 4
gpt4 key购买 nike

这是我的mongo文档..

{
"_id" : ObjectId("5a69d0acb76d1c2e08e4ccd8"),
"subscriptions" : [
{
"sub_id" : "5a56fd399dd78e33948c9b8e",
"invoice_id" : "5a56fd399dd78e33948c9b8d"
},
{
"sub_id" : "5a56fd399dd78e33948c9b8e"
}
]
}

我想更新 invoice_id 并将其插入到子数组的最后一个元素中。我试过..
排序:{$natural: -1},
订阅.$.发票

我想要的是......

{
"_id" : ObjectId("5a69d0acb76d1c2e08e4ccd8"),
"subscriptions" : [
{
"sub_id" : "5a56fd399dd78e33948c9b8e",
"invoice_id" : "5a56fd399dd78e33948c9b8d"
},
{
"sub_id" : "5a56fd399dd78e33948c9b8e",
"invoice_id" : "5a56fd399dd78e33948c9b8f"
}
]
}

最佳答案

虽然有一些方法可以获取最后一个数组元素,就像 Saravana 在她的回答中显示的那样,但我不建议这样做,因为它会引入竞争条件。例如,如果同时添加两个 sub,则不能依赖于数组中的“最后一个”。

如果 invoice_id 必须绑定(bind)到特定的 sub_id,那么最好在数组中查询并找到该特定元素,然后将 invoice_id 添加到其中。

在评论中,OP 表示当前的操作顺序是 1)添加 sub_id,2)将发票记录插入 INVOICE 集合并获取 invoice_id,3)将 invoice_id 添加到新订阅中。

但是,如果您已经有了 sub_id,那么最好以这种方式重新排序您的操作:1) 插入发票记录并获取 invoice_id 2) 添加 两者 sub_id 和 invoice_id单次操作。

这样做可以提高性能(消除第二次更新操作),但更重要的是,消除竞争条件,因为您同时添加了 sub_id 和 invoice_id。

关于MongoDB 更新最新的子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com