繁体   English   中英

当某个日期小于新的Date()时,如何从mongodb集合中删除文档

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM