在MongoDB中使用TTL

时间:2016-12-05 02:27:13

标签: mongodb database-schema mongoose-schema

我正在研究一个大冒险克隆。我正在使用mongoDB来存储图片和视频的元数据和网址(存储在cloudinary上)。我遇到的主要问题是对故事特征进行建模。我目前有两个声明的模式,一个Stories模式和一个视频模式。

将视频文档添加到新故事时:

  1. 创建了一个新的Story文档。
  2. 创建一个新的视频文档。
  3. Story文档的objectId存储在视频文档中的字段上。
  4. 将视频文档添加到现有故事时:

    1. 创建一个新的视频文档。
    2. Story文档的objectId存储在视频文档中的字段上。
    3. 要收到一个故事列表,要观看api查询Stories集合中所有可用的故事。然后,用户可以选择他们想要查看的故事。所选故事中的objectId用于查询包含指定故事的objectId的所有文档的视频集合。视频和故事集合中的所有文档都设置为在86400秒(24小时)后过期。

      理想情况下,每次将新视频添加到故事时,到期时间应重置为完整的86400秒。我无法想出一个重置过期时间的好方法,所以我使用mongo的findOneAndReplace方法来查找故事,并用一个全新的副本替换它,因此“重置”到期时间。我正在添加功能,让用户可以看到谁喜欢他们的故事,这意味着我必须为每个玩家添加名字,姓氏和objectId。虽然findOneAndReplace与小文档大小完美配合,但随着文档变大,操作所需的时间也会增加。有没有更好的方法来重置Stories集合上的TTL而不必每次都重新创建每个文档?

      TLDR有没有办法在不创建新文档的情况下重置MongoDB文档的过期时间?

0 个答案:

没有答案