2016-11-20 188 views
0

我有這樣的事情:覆蓋數據與貓鼬

Accounts.insertMany(topAccounts) 
      .then(function (result) { 
       console.log('Succesfully saved '+ result.length + ' documents... closing connection...') 
       mongoose.connection.close(); 
      }) 
      .catch(function(err){ 
       console.log('oh shit'); 
       console.log(err); 
      }) 

這所保存的數據追加到我的收藏。有什麼方法可以覆蓋它嗎?保存數據之前刪除集合是否是我的最佳解決方案?

回答

0

我一直在這種情況下,但爲種子初始數據庫數據。我發現了兩個不同的解決方案:

  1. 刪除集合 - model.collection.drop()
    這是不是刪除所有文件中收集了大量的更快。 Mongoose會自動重新創建它,但我不認爲它會自動確保創建索引。
    注意:當我這樣做時,似乎有一個沒有立即下降的競賽狀況。如果我打電話,然後插入(如果我記得正確),我最終收集了一個空集。我只是在插入所有種子文檔之前設置了1秒的超時時間,並且工作正常。

  2. 刪除所有文件 - model.remove()
    這是一個大集合很慢操作,因爲它有每次刪除文件時更新索引。


雖這麼說,我不知道你是如何使用TopAccounts但它似乎像你像一個名稱 - 值對,其中名稱是TopAccounts處理它和值是TopAccounts數組。根據您使用這些帳戶的方式,您可能需要考慮將所有TopAccounts存儲在單個文檔中 - 這甚至可以讓您及時回溯並查看特定日期的最佳帳戶。

你可以存儲它是這樣的,然後按日期查詢:

{ 
    "_id": ObjectId("..."), 
    "date": Date("2016-11-19"), 
    "top_accounts": [ 
     {... top account #1 ...}, 
     {... top account #2 ...}, 
     {... top account #3 ...} 
     ... 
    ] 
} 
+0

謝謝蘭迪。我喜歡你關於讓topAccounts在它自己的文檔中有各自的日期的建議,但我會堅持重寫,因爲我不想在一兩年內擔心存儲問題。我正在做'Model.remove({},callback)',它可以很快完成工作(集合中只有4950個文檔)。但是知道'.remove()'和'.drop()'之間的區別對於較大的集合將非常方便。 – jgozal