小编va5*_*5ja的帖子

在聚合期间以几秒为单位获取MongoDB ISODate的unix时间戳

我正在寻找这个,但我找不到任何有用的解决我的情况.我想要的是在聚合期间以几秒为单位获取MongoDB ISODate的unix时间戳.问题是我可以从ISODate中获取时间戳,但它是以毫秒为单位.所以我需要减少那些毫秒.我试过的是:

> db.data.aggregate([
    {$match: {dt:2}}, 
    {$project: {timestamp: {$concat: [{$substr: ["$md", 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
  ])
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试从'md'var中获取时间戳,并将此时间戳与'01'和'id'数字连接起来.上面的代码给出:

{
    "_id" : ObjectId("52f8fc693890fc270d8b456b"),
    "timestamp" : "2014-02-10T16:20:56011141"
}
Run Code Online (Sandbox Code Playgroud)

然后我改进了命令:

> db.data.aggregate([
    {$match: {dt:2}},
    {$project: {timestamp: {$concat: [{$substr: [{$subtract: ["$md", new Date('1970-01-01')]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
  ])
Run Code Online (Sandbox Code Playgroud)

现在我得到:

{
    "_id" : ObjectId("52f8fc693890fc270d8b456b"),
    "timestamp" : "1392049256000011141"
}
Run Code Online (Sandbox Code Playgroud)

我真正需要的是1392049256011141所以没有3额外的000.我尝试了$减法:

> db.data.aggregate([
    {$match: {dt:2}}, 
    {$project: {timestamp: {$concat: [{$substr: [{$divide: [{$subtract: ["$md", new Date('1970-01-01')]}, 1000]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}} …
Run Code Online (Sandbox Code Playgroud)

mongodb unix-timestamp isodate mongodb-query aggregation-framework

4
推荐指数
1
解决办法
8436
查看次数