如何在没有objectid字段的mongodb集合上查找上次更新/插入/删除操作时间

时间:2015-10-28 05:34:46

标签: mongodb collections

我在MongoDb数据库中有一些未使用的集合。我发现CRUD操作何时对数据库中的集合进行了处理。我们有自己的_id字段而不是mongo的默认object_id。我们没有时间在集合中提交以找出修改时间。有没有办法从元数据中找出mongodb中集合的修改时间?是否有任何数据字典信息,如在oracle中找到这个?请给出一些想法/解决方法

2 个答案:

答案 0 :(得分:0)

在MongoDB中没有“数据字典”来获取此信息。

如果您已提前启用了性能分析级别以记录所有操作(db.setProfilingLevel(2))并且您没有多少操作要记录,那么system.profile capped collection没有覆盖你感兴趣的任何日志,你可以获得你需要的信息 - 但是它已经消失了。

答案 1 :(得分:0)

简而言之:MongoDB有一个灵活的架构。只需添加日期字段即可。由于较旧的参赛作品不具备,因此不能成为最后一个参赛作品。

让我们调用该字段mtime

因此,在为模式定义添加日期字段后,我们会在新字段上按降序生成索引:

db.yourCollction.createIndex({mtime:-1})

现在可以轻松找到集合的最后一个mtime:

db.yourCollection.find({"mtime":{"$exists":true}}).sort({"mtime":-1}).limit(1)

为每个集合执行此操作。当上述查询未在您为清除集合定义的时间范围内返回值时,只需删除它,因为自您引入mtime字段后它尚未被修改。

清理收藏集后,您可以从架构定义中删除mtime字段。要从文档中删除它,您可以运行一个简单的查询:

db.yourCollection.update(
  { "mtime":{ $exists:true} },
  { "$unset":{ "mtime":""} },
  { multi: true}
)