【发布时间】:2021-03-17 14:59:18
【问题描述】:
我有一个名为PeopleDocument 的集合。此集合包含三种不同类型的文件:IDCardCopy、taxCopy、PermitCopy。用户可以上传任何这些文件。我想在上传一年后自动删除IDCardCopy。我正在查看 MongoDB TTL,但是我有一些问题:
db.PeopleDocument.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 31622400} )
如果我创建一个像上面那样的索引,我认为它会在 1 年后删除 PeopleDocument 中的所有文件,是否可以只删除 IDCardCopy?
更多细节:
这是我用来插入文档的 C# 代码:
var collInternDocuments = _database.GetCollection<BsonDocument>("PPLDocuments");
var doc = new BsonDocument{
{"Documentid", strDocumentID},
{ "FileType", typeOfDocument},
{ "FileContent", file.ContentType},
{ "FileName", file.FileName},
{ "UploadTime", DateTime.Now},
{ "UploadedBy", uploadedBy},
{ "GridFSFileID", strGridFSFileID}
};
collInternDocuments.UpdateOne( Builders<BsonDocument>.Filter.Eq("_id", internUserID), Builders<BsonDocument>.Update.AddToSet("Documents", doc));
这就是我创建索引的方式:
db.PeopleDocument.createIndex( {UploadTime:1},
{
expireAfterSeconds:900,
partialFilterExpression:{
FileType:{$eq:"IDCardCopy"}
}
})
这是 db.PeopleDocument.getIndexes() 的结果:
{
"v":2,
"key":{
"_id":1
},
"name" :"_id_",
"ns" : "people.PeopleDocument"
},
{
"v":2,
"key":{
"UploadTime":1
},
"name" :"UploadTime_1",
"ns" : "people.PeopleDocument",
"expireAfterSeconds":900,
"partialFilterExpression":{
"FileType": { "$eq":"IDCardCopy"
}
}
}
这在 900 秒后没有删除文件,这可能是日期问题吗?
【问题讨论】:
-
为什么不将
fileType添加到您的索引中? -
db.PeopleDocument.createIndex( { "fileType": "IDCard" }, { expireAfterSeconds: 31622400} )你是这个意思吗? -
你可以试试 ttl 和部分索引:stackoverflow.com/a/50272567/4368485
-
@ĐĵΝιΓΞΗΛψΚ
db.PeopleDocument.createIndex({"uploadTime":1}, {exprieAfterSeconds:900, partialFilterExpression:{"FileType":{$eq:"IDCardCopy"}}})这就是我创建索引时所做的。只是为了测试我放了 900 秒(15 分钟),我仍然可以看到在 15 分钟之前上传的 IDCardCopy。我做错了吗?