将iso日期转换为mongo查询中的时间戳

时间:2016-09-01 14:29:33

标签: mongodb date mongodb-query aggregation-framework

这是查询

 {{ user.user_username | uppercase }}

我需要时间戳中的日期。怎么做?

3 个答案:

答案 0 :(得分:11)

使用$subtract 算术聚合运算符,将日期作为 minuend ,将new Date("1970-01-01")作为 subtrahend

db.collection.aggregate(
  {
    $project: { "timestamp": { $subtract: [ "$createdAt", new Date("1970-01-01") ] } } 
  }
);

对于文件

{ "_id": 1, "createdAt": ISODate("2016-09-01T14:35:14.952Z") }

结果是

{ "_id": 1, "timestamp": NumberLong("1472740514952") }

如果你想按时间戳和(年,月,日)对两者进行分组,你可以将时间戳除以一天中的毫秒数,这样它每天都是唯一的(而不是每一毫秒)

db.collection.aggregate(
  {
    $project: 
      {
        "timestampByDay":
          {
            $floor: 
              {
                $divide: 
                  [ 
                    { $subtract: [ "$createdAt", new Date("1970-01-01") ] }, 
                    24 * 60 * 60 * 1000 
                  ] 
              }
          },
        "date": "$createdAt"
      }
  },
  {
    $group:
      {
        "_id": "$timestampByDay",
        "date": { $first: "$date" }
      }
  }
);

答案 1 :(得分:7)

Mongodb 4.0 引入了$toLong聚合,可将日期转换为时间戳

db.collection.aggregate([
  { "$project": {
    "createdAt": {
      "$toLong": "$createdAt"
    }
  }}
])

您可以尝试here

答案 2 :(得分:2)

如果要更新时间戳。当前日期和时间,请使用以下查询。

db.getCollection('movie').update(
{"applicationId":"2b5958d9629026491c30b42f2d5256fa8","type":"shortcut"},
{$set : {userName:"vipin+testkm23052020@applozic.com",created_at: NumberLong(new Date()),"updated_at":NumberLong(new Date()),"docIndex":UUID()}}, {multi:true, upsert: false}
)