如何在MongoDB的shell中将NumberLong转换为日期?

5

我在MongoDB中将Unix时间戳以NumberLong类型(毫秒)存储,如何在Mongo shell中将其转换为易于阅读的日期字符串?

6个回答

4

以下是我自己以及其他答案的参考:

db.mycollection.aggregate([
  {$match:{"userId":"d1792d83-d854-44d5-9jc5-e3e20435958b"}},
  {$project:{newDate:Date("$numberLongDate")}}
])

在第二次查看时,这似乎不起作用。它为每个$numberLongDate返回相同的日期。 - fred271828
1
这是修复方法:newDate:{$add: [new Date("1970-01-01"), "$numberLongDate"]} - fred271828
嗨fwc,我一直在尝试模仿你上面的代码,但是当我运行它时,所有新日期列都返回Null。你能看出我做错了什么吗?db.mycoll.aggregate([ {$project:{newDate:{$add:[new Date(“1970-01-01”),"$numberLongDate"]}}} ]) - davo777
很难说,$numberLongDate也许应该是你的日期字段的名称? - fred271828

3
NumberLong(123123123123131).toNumber().toString()

2

我正在使用像这样的表达式:

>Date(NumberLong("1397051113715")); 

这也可以工作。


1
我将 Unix NumberLong 时间戳转换成日期,使用了以下代码:

new Date(1413382500151)

1413382500151 只是一个“数字”类型,不是“NumberLong”类型。 - JohnnyHK

1
例如,不需要将其转换为字符串。
 >var a = db.collection.findOne({name :"zengse"},{"createDate":1,_id:0})
 > a.createDate
 NumberLong("1575741914380")
 > var b = a.createDate.toNumber()
 > new Date(b)
 ISODate("2019-12-07T18:05:14.380Z")

0

如果您使用new关键字调用Date构造函数并在其上调用toString()方法将其转换为可读字符串,则可以直接将NumberLong值传递给它:

> var n = NumberLong('1397051113715')
> (new Date(n)).toString()
Wed Apr 09 2014 08:45:13 GMT-0500 (CDT)

但是你应该强烈考虑将这些时间戳存储为 MongoDB 中的 Date 类型,以获得更大的灵活性。


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