Mongodb从现有日期字段添加时间戳字段

时间:2012-07-05 00:43:59

标签: mongodb timestamp

我目前有一个包含以下文档的集合:

{ 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”字段的时间戳。

2 个答案:

答案 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' } 
        } }
    ]
)