2014-02-21 35 views
0

我有一個集合,我想用最近幾個小時的隨機時間更新每條記錄的日期。我一直在使用下面的更新:用隨機時間更新集合中的每條記錄?

db.users.update(
    {}, 
    { 
     $set: 
     { 
      loggedIn: new Date((ISODate().getTime() - 1000*60*(ISODate().getTime()%300))) 
     } 
    }, 
    false, 
    true 
); 

但是,這更新每個記錄具有相同的隨機時間。我怎樣才能讓1000*60*(ISODate().getTime()%300部分在每次更新時執行,而不是執行一次,然後用相同的值更新記錄?

+0

你將不得不迭代每條記錄並設置它? (只是猜測) – tymeJV

+0

這個問題仍然存在的原因是什麼? –

+0

仍然開放,因爲在沒有接受的答案或公開開放? –

回答

2

沒錯。該操作是原子操作,此處的「隨機日期值」正在被評估一次,然後通過multi更新應用於所有記錄。

所以在任何編程實現你想要的迭代形式:

db.users.find({}).foreach(function(user) { 

    db.users.update({ _id: user._id }, 
    { 
     $set: 
     { 
      loggedIn: new Date((ISODate().getTime() - 1000*60*(ISODate().getTime()%300))) 
     } 
    }); 

}; 

上有batch updates工作,但即使是這樣,你需要生成你的「隨機的時間」爲每個文檔

相關問題