我目前有一个包含以下文档的集合:
{ foo: 'bar', timeCreated: ISODate("2012-06-28T06:51:48.374Z") }
我现在想在此集合中的文档中添加timestampCreated
密钥,以便更容易按时查询。
我能够使用update
和$set
操作添加新列,并设置时间戳值,但我似乎是使用此设置当前时间戳:
db.reports.update({}, {
$set : {
timestampCreated : new Timestamp(new Date('$.timeCreated'), 0)
}
}, false, true);
但是,我无法找到添加此列的方法,并将其值设置为现有“timeCreated”字段的时间戳。
答案 0 :(得分:2)
查找所有文档,仅限于id和timeCreated字段。然后遍历它并生成timestampCreated值,并对每个值进行更新。
答案 1 :(得分:0)
使用updateMany()
可以接受aggregate pipelines(从MongoDB 4.2开始),从而利用$toLong
运算符将日期转换为自纪元以来的毫秒数。
还可以在更新$type
中使用filter查询来仅限制具有timeCreated
字段和日期类型的文档:
db.reports.updateMany(
{ 'timeCreated': {
'$exists': true,
'$type': 9
} },
[
{ '$set': {
'timestampCreated': { '$toLong': '$timeCreated' }
} }
]
)