【问题标题】:How to find last update/insert/delete operation time on mongodb collection without objectid field如何在没有objectid字段的mongodb集合上查找上次更新/插入/删除操作时间
【发布时间】:2016-01-27 18:53:49
【问题描述】:

我在 MongoDb 数据库中有一些未使用的集合。我必须找出对数据库中的集合执行 CRUD 操作的时间。我们有自己的 _id 字段,而不是 mongo 的默认 object_id。我们没有任何时间归档在集合中以找出修改时间。有没有办法从元数据中找出 mongodb 中集合的修改时间?有没有像 oracle 这样的数据字典信息来找出这个?请给出一些想法/解决方法

【问题讨论】:

  • 如果没有时间字段,你怎么想找到修改时间
  • @Alok:为什么我们不能思考?在其他数据库中,例如 oracle,即使您没有提交时间,也有数据字典视图。
  • @alok:如果我对mongodb操作了如指掌,就没有必要在这个论坛提出问题吧?如果假设这个选项在 mongodb 中可用,那么它对于管理任务非常方便。人们在这里知识渊博。所以我可以从他们那里得到帮助。

标签: mongodb collections


【解决方案1】:

长话短说: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}
)

【讨论】:

    【解决方案2】:

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

    如果您提前启用了分析级别以记录所有操作 (db.setProfilingLevel(2)),并且您没有很多操作要记录,因此 system.profile capped collection 没有被覆盖无论您对什么日志感兴趣,您都可以在那里获得您需要的信息——否则它就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 2014-05-12
      相关资源
      最近更新 更多