我正在寻找这个,但我找不到任何有用的东西来解决我的问题。我想要的是在聚合期间从 MongoDB ISODate 中以秒为单位获取 unix 时间戳。问题是我可以从 ISODate 中获取时间戳,但它以毫秒为单位。所以我需要减少那些毫秒。我试过的是:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: ["$md", 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
如您所见,我正在尝试从“md”var 中获取时间戳,并将此时间戳与“01”和“id”编号连接起来。上面的代码给出:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "2014-02-10T16:20:56011141"
}
然后我改进了命令:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: [{$subtract: ["$md", new Date('1970-01-01')]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
现在我得到:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1392049256000011141"
}
我真正需要的是 1392049256011141,所以没有 3 个额外的 000。我尝试使用 $subtract:
> 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]}]}}}
])
我得到的是:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1.39205e+009011141"
}
不完全是我对命令的期望。不幸的是 $substr 运算符不允许负长度。有没有人有任何其他的解决方案?