2015-12-23 56 views
0

我有一些代码,我设置了以下管道:过滤器集合,项目年&月,按年份分组&月,然后完成一个日期时间对象,如YYYY-MM-01。如何在pymongo管道内创建日期时间对象?

实例文档:

{ 
    _id: 123456 
    foo: "bar" 
    dt: ISODate("2015-12-24T11:59:00Z") 
} 

示例代码:

from pymongo import MongoClient 
db = client.testDB 
posts = db.testCollection 
pipeline = [ 
    {"$match": {"foo":"bar"}}, 
    {"$project": { 
     "year": {"$year": "$dt"}, 
     "month": {"$month": "$dt"}, 
    } 
    }, 
    {"$group": { 
     "_id": { "dt": ??? }, 
     "totalCount": { "$sum": 1 } 
    } 
    }, 
    {"$out": "myResults"} 
} 
posts.aggregate(pipeline) 

目标:

{ 
    _id: {dt: ISODate("2015-12-01T00:00:00Z")} 
    totalCount: 8 
} 

回答

0

为了项目日期的第一个月,例如,变换2015-12-242015-12-01,我修改了code on this page如下:

例文献:

{ 
    _id: 123456 
    foo: "bar" 
    dt: ISODate("2015-12-24T11:59:00Z") 
} 

代码:

from pymongo import MongoClient 
db = client.testDB 
posts = db.testCollection 
pipeline = [ 
    {"$match": {"foo":"bar"}}, 
    { 
    "$project": { 
     "dt": "$dt" 
     "d": {"$dayOfMonth": "$dt"}, 
     "h": {"$hour": "$dt"}, 
     "m": {"$minute": "$dt"}, 
     "s": {"$second": "$dt"}, 
     "ml": {"$millisecond": "$dt"}, 
    } 
    }, 
    { 
    "$group": { 
     "_id": { 
     "$subtract": [ 
      "$dt", 
      { 
      "$add": [ 
       "$ml", 
       {"$multiply": ["$s", 1000]}, 
       {"$multiply": ["$m", 60, 1000]}, 
       {"$multiply": ["$h", 60, 60, 1000]}, 
       {"$multiply": [{"$subtract": ["$d", 1]}, 24, 60, 60, 1000]}, 
      ] 
      } 
     ] 
     }, 
     "totalCount": { "$sum": 1 } 
    } 
    }, 
    {"$out": "myResults"} 
} 
相关问题