簡體   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