4

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

{ foo: 'bar', timeCreated: ISODate("2012-06-28T06:51:48.374Z") }

我现在想为timestampCreated这个集合中的文档添加一个键,以便更轻松地按时间查询。

我能够使用updateand$set操作添加新列,并设置时间戳值,但我似乎正在使用以下方法设置当前时间戳:

db.reports.update({}, { 
    $set : { 
        timestampCreated : new Timestamp(new Date('$.timeCreated'), 0) 
    } 
}, false, true);

但是,我还没有找到添加此列并将其值设置为现有“timeCreated”字段的时间戳的方法。

4

2 回答 2

2

查找所有文档,仅限于 id 和 timeCreated 字段。然后循环并生成 timestampCreated 值,并对每个值进行更新。

于 2012-07-05T01:00:33.000 回答
-1

使用updateMany()which 可以接受聚合管道(从 MongoDB 4.2 开始),从而利用$toLong将 Date 转换为自纪元以来的毫秒数的运算符。

还使用$type更新过滤器中的查询来限制具有timeCreated字段和日期类型的文档:

db.reports.updateMany(
    { 'timeCreated': {
        '$exists': true,
        '$type': 9
    } },
    [
        { '$set': { 
            'timestampCreated': { '$toLong': '$timeCreated' } 
        } }
    ]
)
于 2020-11-14T20:04:23.123 回答