从现有的日期字段中添加时间戳字段到Mongo数据库

5

我目前有一组类似以下文档的文件:

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


那么,最终执行的查询语句是什么?我遇到了一些错误。 - Gagan Deep
2个回答

3

对所有文档执行查找操作,仅限于id和timeCreated字段。然后遍历结果并生成timestampCreated值,在每个文档上执行更新操作。


我可以在mongodb shell中直接完成这个操作吗? - xzyfer
你可以在游标对象上运行forEach。参见此问题,其中有一个几乎匹配的示例:https://dev59.com/v2855IYBdhLWcg3wyniC - jdi

-1
使用 updateMany(),它可以接受 聚合管道(从 MongoDB 4.2 开始),因此可以利用 $toLong 运算符将日期转换为自纪元以来的毫秒数。
还要在更新 筛选器 中使用 $type 查询,以仅限制具有 timeCreated 字段和日期类型的文档:
db.reports.updateMany(
    { 'timeCreated': {
        '$exists': true,
        '$type': 9
    } },
    [
        { '$set': { 
            'timestampCreated': { '$toLong': '$timeCreated' } 
        } }
    ]
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接