我嘗試在 mongo 中開始使用 TTL 索引,并希望運行一個簡單的演示設定,但我無法讓它作業,我不確定我做錯了什么。
蒙哥版本:
$ mongod --version
db version v4.4.5
Build Info: {
"version": "4.4.5",
"gitVersion": "ff5cb77101b052fa02da43b8538093486cf9b3f7",
"openSSLVersion": "OpenSSL 1.1.1m 14 Dec 2021",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "debian10",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
我從一個全新的、默認配置的 mongod 實體開始:
$ mkdir /tmp/db && mongod --dbpath /tmp/db
然后我運行以下命令
use test
db.ttldemo.insertOne({
created_at: Date(Date.now() 60_000)
})
db.ttldemo.createIndex({created_at: 1}, {expireAfterSeconds: 1})
db.ttldemo.find()
我希望該檔案會在一段時間后消失,但即使在find()等待幾分鐘后運行,該檔案仍然存在。
我在這里有什么遺漏嗎?
db.adminCommand({getParameter:1, ttlMonitorSleepSecs: 1})屈服于60我
uj5u.com熱心網友回復:
我在 mongo 4.2.17 中嘗試過,您插入的檔案會生成如下檔案:
{
"_id" : ObjectId("61f17ea34844b5f0505d80ea"),
"created_at" : "Wed Jan 26 2022 19:02:27 GMT 0200 (GTB Standard Time)"
}
當。。。的時候
db.getCollection('ttldemo').insertOne({created_at: new Date()})
產生如下檔案:
{
"_id" : ObjectId("61f17f404844b5f0505d80ec"),
"created_at" : ISODate("2022-01-26T17:05:04.023Z")
}
這里強調 created_at 欄位,在第一種情況下 this 是一個字串,在第二種情況下是一個 ISODate。從檔案開始,該索引僅適用于日期:
要創建 TTL 索引,請在其值為日期或包含日期值的陣列的欄位上使用 createIndex() 方法,并指定 expireAfterSeconds 選項以及所需的 TTL 值(以秒為單位)。
這里的解決方案是按如下方式構造日期:
db.getCollection('ttldemo').insertOne({created_at: new Date(new Date().getTime() 60000)})
這將根據當前日期 60 秒創建一個新的 ISODate。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422862.html
標籤:
