我想要drop documents
的{{1}}
请参阅样本文档
less than 60 days.
日期字段 StartRunTime 是字符串。
如何使用{
"_id" : ObjectId("5c4abd3e29cb6d223043c036"),
"UniqueStoryID" : "4018-1548377034",
"LastUpdated" : 148401982,
"StartRunTime" : "01/25/2019 00:43:54"
}
进行查询?
答案 0 :(得分:0)
您可以使用TTL indexes让mongodb为您完成此任务。或将StartRunTime
存储为日期而不是字符串。比起您可以用$ lte进行查询。
答案 1 :(得分:0)
将日期存储在datetime对象中,而不是字符串中。如果您将日期存储在字符串中,则只会进行字典比较,请相信我,您不希望这样做。始终存储为日期时间对象。
回到问题(假设日期在datetime对象中)
old_date = current_date - 60days
<Collection>.delete_many({StartRunTime: {'$lt': old_date}})
或者您可以使用MongoDB TTL Indexes,它将在60天后自动删除文档(您必须对其进行配置),并且您不必将StartRunTime存储为日期时间对象,则可以保留其值任何你想要的。
答案 2 :(得分:0)
您可以使用$where
运算符(接受JS函数)来完成此操作:
db.collection.deleteMany({
$where: function () {
var date = new Date(this.StartRunTime);
return Math.round((Date.now() - date.valueOf()) / (1000 * 60 * 60 * 24)) > 60;
}
})
注意:
new Date(...)
,它将在计算机的本地时区中进行解析。如果希望将其解析为GMT,则可以在日期字符串的末尾连接GMT,例如:new Date(this.StartRunTime + " GMT")
。 重要说明:$where
运算符无法使用索引,因此可能会导致性能下降。我只是建议这种解决方案,因为它可以回答您的问题。我认为更好的解决方案是将日期存储为正确的日期类型。