gpt4 book ai didi

以时间戳为键的 MongoDB 版本控制

转载 作者:可可西里 更新时间:2023-11-01 10:05:11 26 4
gpt4 key购买 nike

我正在尝试在 MongoDB 中实现版本控制(基于存储文档之间的差异),如这篇文章所述:Ways to implement data versioning in MongoDB

到目前为止,我使用的是相同的方法,但我想进行如下查询:“给我 Date1 和 Date2 之间的所有更改”。帖子中提供的模式仅使用普通的增量编号作为不允许此类查询的更改的键:

{
_id : "id of address book record",
changes : {
1234567 : { "city" : "Omaha", "state" : "Nebraska" },
1234568 : { "city" : "Kansas City", "state" : "Missouri" }
}
}

我唯一的猜测是,要进行基于时间的查询,我必须在键值中包含一些时间信息。也许像这样的 ObjectId 或 ISODate:

{
_id : "id of address book record",
changes : {
ISODate(Date) : { "city" : "Omaha", "state" : "Nebraska" },
ObjectId(id) : { "city" : "Kansas City", "state" : "Missouri" }
}
}

我在谷歌上搜索了很长时间以寻找解决方案,但找不到任何真正有用的东西。如果有人对如何执行此操作有想法,那么如果您能帮助我,那就太好了。甚至可能这是解决问题的完全错误的方法,并且有更好的方法来解决这个问题......我愿意接受任何建议!

谢谢你帮我...

最佳答案

使用 IsoDate(或简单日期)进行版本控制是一种很好的方法。但是,为了高效地搜索它,您不应该将它用作字段标识符,而是将更改做成一个数组,并将日期放入该数组中的子文档中:

{
_id : "id of address book record",
changes : [
{ "change_date": ISODate(Date), "city" : "Omaha", "state" : "Nebraska" },
{ "change_date": ISODate(Date), "city" : "Kansas City", "state" : "Missouri" }
]
}

这允许您将 changes.change_date 字段用于 $gte 或 $lte 的查询。您还可以使用 $max aggregation grouping operator 找到最近的一个。 (不要与 $max query operator 混淆,后者做的事情完全不同)。

您可能还想向 changes.change_date 添加索引以加速这些查询。

关于以时间戳为键的 MongoDB 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660272/

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