我有一个集合,我希望在过去几个小时内随机时间更新每条记录中的日期。我一直在使用以下更新:
db.users.update(
{},
{
$set:
{
loggedIn: new Date((ISODate().getTime() - 1000*60*(ISODate().getTime()%300)))
}
},
false,
true
);
但是这会以相同的随机时间更新每条记录。如何在每次更新时执行1000*60*(ISODate().getTime()%300
部分,而不是执行一次,然后更新具有相同值的记录?
答案 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上有工作,但即使如此,您也需要为每个文档生成“随机时间”