[英]How to delete a document from a mongodb collection when some date is smaller than new Date()
当文档中的某个date
小于new Date()
时,我试图从MongoDB
集合中删除(导入新文档时)一些文档。
每次导入文档时,我都会检查是否需要删除具有相同STATION_ID
的文档。
现在,我使用猫鼬这样做:
function doTheStuff(stationid, time, callback) {
OwnMetarDoc.find({
STATION_ID: stationid[0]
}, function(err, entry) {
var isTaf = false;
if (entry[0] != undefined) {
if (entry[0].TIME) {
var entryObjectTimerec = entry[0].TIME;
var isTaf = true;
};
var d = new Date;
var month = d.getUTCMonth();
var year = d.getUTCFullYear();
var timeRecConverted = new Date(year, month, parseInt(entryObjectTimerec.substring(0, 2)),
parseInt(entryObjectTimerec.substring(2, 4)), parseInt(entryObjectTimerec.substring(4, 6)));
//The relevant part
if (timeRecConverted.getTime() < new Date() && isTaf == true) {
OwnMetarDoc.remove({
_id: entry[0]._id
}, function(err, result) {
if (err) {
console.log(err);
} else {
console.log('old taf entry removed');
};
});
}
if (typeof callback === 'function') {
callback()
};
};
})
};
但是当我有超过100'000个条目和多个回调时,这花费了太长时间。
有人知道是否有办法快速,自动地做到这一点吗?
我必须删除在架构中这样早于fe八个小时的文档时才知道该怎么做:
var ownMetarSchema = new Schema({
STATION_ID: String,
TIMERECASDATE: {
type: Date,
expires: 28800
}
})
但是我不知道如何使用上一个示例。
ps:我对Java语言还比较陌生,您可能需要更多信息,请问我一下。
据我了解,您想更新您的文档。 您应该阅读mongo文档。 此处: http : //docs.mongodb.org/manual/tutorial/modify-documents/您可以将所有值替换为新值。 希望能有所帮助。
如果您知道天气预报会持续多久,我会假设您将使用TTL
部分。 由于您尚未使用TTL
,这意味着您的预测可能是将来的一天甚至一个月(仅用于讨论)。
您将找到所有带有STATION_ID
的文档并进行解析。 相反,您可以执行以下操作:
如果您具有带有确切时间戳的字段date
,则只需运行
db.collection.remove({'date':{'$lt': new Date()} })
http://docs.mongodb.org/manual/reference/method/db.collection.remove/
这将删除日期小于当前日期的所有文档。 如果需要,还可以添加station_id字段。 但是对于天气,我认为没有必要。
我建议在单独的线程/ cron作业中执行此删除操作,而不是在推送数据时执行此删除操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.