使用随机时间更新集合中的每条记录?

时间:2014-02-21 01:04:36

标签: javascript mongodb mongodb-query

我有一个集合,我希望在过去几个小时内随机时间更新每条记录中的日期。我一直在使用以下更新:

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

但是这会以相同的随机时间更新每条记录。如何在每次更新时执行1000*60*(ISODate().getTime()%300部分,而不是执行一次,然后更新具有相同值的记录?

1 个答案:

答案 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上有工作,但即使如此,您也需要为每个文档生成“随机时间”