Коллекции Reactivemongo TTL

Я знаю, что могу установить TTL в MongoDB с помощью

db.ttl_collection.ensureIndex( { "Date": 1 }, { expireAfterSeconds: 10 } ) 

и я знаю, что могу обеспечить индекс с помощью Scala в Reactivemongo с помощью

collection.indexesManager.ensure(index)

Но как я могу установить коллекции TTL в реактивном монго из кода? Или есть другой способ сделать записи с истекающим сроком действия в Mongo с помощью reactivemongo в Scala?


person Krzysztof Wende    schedule 23.11.2014    source источник


Ответы (2)


Я наконец узнал это. Это не совсем понятный способ сделать это, но, похоже, работает:

collection.indexesManager.ensure(Index(Seq(("Date", IndexType(BSONInteger(1)))), Some("expireAfterSeconds"), false, false, false, false, None, BSONDocument( "expireAfterSeconds" -> 0 )

Таким образом, каждый объект с expireAfterSeconds: BSONDateTime в этой коллекции истечет после указанной даты. Но я даже не знаю, за что отвечают эти логические значения.

person Krzysztof Wende    schedule 23.11.2014
comment
Я предполагаю, что Дата — это имя вашего поля в документе, верно? Вам нужно сделать что-нибудь еще, чтобы заставить его работать? Я добавил это в свой код, и срок действия документа не истекает. Следует ли это вызывать при инициализации или перед каждой вставкой? - person redwulf; 04.03.2016

В моем проекте у нас есть эта функция

  def ensureIndex(
               key: List[(String, IndexType)],
               name: Option[String] = None,
               unique: Boolean = false,
               background: Boolean = false,
               dropDups: Boolean = false,
               sparse: Boolean = false,
               version: Option[Int] = None,
               options: BSONDocument = BSONDocument()) = {

  val index = Index(key, name, unique, background, dropDups, sparse, version, options)
  log.info(s"Ensuring index: $index")
  collection.indexesManager.ensure(index)
}

И я использую его следующим образом для индексов TTL ($doc происходит от BSON DSL):

ensureIndex(List("lastModifiedOn" -> IndexType.Ascending), options = $doc("expireAfterSeconds" -> 30))
person Darren Bishop    schedule 12.09.2015