加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 21:07:34 所属栏目:安全 来源:网络整理
导读:在我目前的项目中,我们使用Mongo存储大量文档(大约100Bln). 如何使用字段_id删除一半最旧的文档,因为如果我使用索引字段“timestamp”,此操作将在当前速度?3年后完成. 解决方法 以下是MongoDB用户Google网上论坛帖子的链接,该帖子讨论了基于时间戳生成Object
在我目前的项目中,我们使用Mongo存储大量文档(大约100Bln).
如何使用字段_id删除一半最旧的文档,因为如果我使用索引字段“timestamp”,此操作将在当前速度?3年后完成.

解决方法

以下是MongoDB用户Google网上论坛帖子的链接,该帖子讨论了基于时间戳生成ObjectIds:
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,并查询具有较小ObjectIds的文档.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读