Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在mongo查询中将iso日期转换为时间戳_Mongodb_Date_Mongodb Query_Aggregation Framework - Fatal编程技术网

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

Mongodb 在mongo查询中将iso日期转换为时间戳,mongodb,date,mongodb-query,aggregation-framework,Mongodb,Date,Mongodb Query,Aggregation Framework,这是一个问题 [ { "$project": { "formattedDate": { "$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" } }, "createdAtMonth": { "$month": "$ceatedAt" }, "rating": 1

这是一个问题

[
    { 
        "$project": {
            "formattedDate": { 
                "$dateToString": { "format": "%Y-%m-%d", "date": "$ceatedAt" } 
            },
            "createdAtMonth": { "$month": "$ceatedAt" },
            "rating": 1
        }
    },
    {
         "$group": {
             "_id": "$formattedDate",
             "average": { "$avg": "$rating" },
             "month": { "$first": "$createdAtMonth" },
         }
    }
]
我需要时间戳上的日期。如何做到这一点?

使用算术聚合运算符,将日期作为分钟,并将新日期(“1970-01-01”)作为子日期

文件

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

{ "_id": 1, "timestamp": NumberLong("1472740514952") }
如果您想同时按时间戳和(年、月、日)分组,您可以将时间戳除以一天中的毫秒数,这样它对于每一天(而不是每毫秒)都是唯一的


Mongodb4.0引入了将日期转换为时间戳的聚合

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

如果要更新时间戳,可以尝试使用它。对于当前日期和时间,请使用以下查询

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}
)

但是,我会得到该日期的分组数据吗?如果要按值(年、月、日)分组,则不会。你能在你的问题中提供一些文件和预期结果吗?是的,根据输入请求,我将按月、每周、每天分组。下面是我得到的关于月和周的答案——它是有效的:现在,当我按天分组时,我需要显示时间戳而不是日期字符串。在分组中,我是否必须添加_id:timestampByDay?是的,然后将其分组为唯一的(年、月、日期)。但请注意,在结果输出中,您将不会得到日期的实际时间戳作为
\u id
,但您将得到时间戳除以
24*60*60*1000
db.collection.aggregate([
  { "$project": {
    "createdAt": {
      "$toLong": "$createdAt"
    }
  }}
])
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}
)