gpt4 book ai didi

shell - 通过 id 从 Mongo 中删除旧文档

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

在我当前的项目中,我们使用 Mongo 来存储大量文档(大约 1000 亿)。如何使用字段 _id 删除一半最旧的文档,因为如果我使用索引字段“timestamp”,此操作将在 ~3 年后以当前速度完成。

最佳答案

这是一个 MongoDB 用户 Google 网上论坛帖子的链接,该帖子讨论了基于时间戳生成 ObjectId: http://groups.google.com/group/mongodb-user/browse_thread/thread/262223bb0bd52a83/3fd9b01d0ad2c41b

来自帖子:从 Mongo ObjectIds 中提取时间戳在Mongo 文档“优化对象 ID” http://www.mongodb.org/display/DOCS/Optimizing+Object+IDs#OptimizingObjectIDs-Extractinsertiontimesfromidratherthanhavingaseparatetimestampfield .

从帖子中的例子可以看出,ObjectIds可能是从Unix时间以秒为单位的时间创建的:

> now = new Date()
ISODate("2012-04-19T19:01:58.841Z")
> ms = now.getTime()
1334862118841
> sec = Math.floor(ms/1000)
1334862118
> hex = sec.toString(16)
4f906126
> id_string = hex + "0000000000000000"
4f9061260000000000000000
> my_id = ObjectId(id_string)
ObjectId("4f9061260000000000000000")

使用上面的公式,您可以从任何日期创建一个 ObjectID,并查询具有较小 ObjectId 的文档。

展望 future ,如果您的应用程序将根据时间保存数据并在数据达到特定年龄后删除数据,您可能会发现将文档存储在单独的集合中更可取;每天、每周或任何对您的应用程序最有意义的时间范围。删除整个集合所需的开销比删除单个文档要少得多,因为它可以通过单个操作完成。 db.<collection>.remove({query})将为每个返回的文档执行写操作,正如您所观察到的,对于大量文档来说,这可能会慢得令人望而却步。

关于shell - 通过 id 从 Mongo 中删除旧文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10226672/

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