MongoDBで古いドキュメントを自動削除する二つの方法 - Qiita
の TTL index 作成時に、createAt に MongoDB サーバー時刻 を設定したくて、
$currentDate を使ってinsert 時に設定しようと試みたのですが、エラーが出力されたため、原因をまさぐっていたところ、
以下 Stack Overflow の質問がヒットしました。
datetime - MongoDB insert “$currentDate” field - Stack Overflow
どうも、現在(2017/06/13) は、insert 時には、指定できないようです。
[SERVER-13695] Support $currentDate expression for insert - MongoDB
Insert してから、Update で $currentDate を指定する
回避策として、upsert すれば設定できそうだったので、
以下の通り、upsert で、$currentDate を指定するようにしました。
実際にはどう動作しているのかはわかりませんが、createAt には、時刻が設定できました。
Document updateDocument = new Document()
.append("$set", new Document("data", data).append("session_key", key))
.append("$currentDate", new Document("createdAt", true));
collection.updateOne(Filters.eq("session_key", key), updateDocument, new UpdateOptions().upsert(true));
MongoDB java driver の version
順番が違いますが、3.2.2
です。
<!-- MongoDB -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
以上です。
コメント