我想在现有字段的基础上设置字段。像:
db.attendances.find().forEach(function(attendance) {
var entryTime = attendance["entryTime"];
var exitTime = attendance["exitTime"];
if(entryTime != null) {
var entryTimeMillis = entryTime.getTime();
attendance["entryTimeMillis"] = entryTimeMillis;
}
if(exitTime != null) {
var exitTimeMillis = exitTime.getTime();
attendance["exitTimeMillis"] = exitTimeMillis;
}
db.attendances.save(attendance);
});
我在attendances
集合中有大约1000万条记录。有没有办法可以更快地执行此操作,因为这需要花费大量时间来处理1000万条记录?
该功能只是将现有的ISODate
字段转换为milliseconds
并将其另存为另一个字段。
发表评论后,我尝试了bulkWrite
:
try {
db.attendances.bulkWrite(
[{
updateMany : {
"filter" : { "entryTime" : { $exists : true } },
"update" : { $set : { "entryTimeMillis" : "$entryTime.getTime()" } }
}
}]
);
} catch (e) {
print(e);
}
但当然"$entryTime.getTime()"
不正确,因为不会被评估,并且在没有"
的情况下它不起作用。我该怎么办?