2015-05-11 23 views
2

我遇到了麻煩試圖從集合獲取小時,減去3小時(GMT-3)

,如果我跑

db.post.aggregate(
    [{$match : {'uri' : /fantastic/ } }, 
    { 
     $project: 
     { 
      _id: 0, 
      created_at : 1, 
      date_minus_3 : {$subtract:["$created_at",3*60*60*1000]}, 
      hour_from_original: { $hour: "$created_at" } 
     } 
    } 
    ] 
) 

我得到

(...) 
    { 
     "created_at" : ISODate("2014-06-03T02:51:42.000Z"), 
     "date_minus_3" : ISODate("2014-06-02T23:51:42.000Z"), 
     "hour_from_original" : 2 
    }, 
(...) 

,但如果我有什麼從 「date_minus_3」

db.post.aggregate(
    [{$match : {'uri' : /fantastic/ } }, 
    { 
     $project: 
     { 
      _id: 0, 
      created_at : 1, 
      date_minus_3 : {$subtract:["$created_at",3*60*60*1000]}, 
      hour_from_original: { $hour: "$created_at" }, 
      hour_from_date_minus_3 : {$hour: {$subtract:["$created_at",3*60*60*1000]}} 
     } 
    } 
    ] 
) 
拿到小時

我得到一個錯誤信息

Error("Printing Stack Trace")@:0 
()@src/mongo/shell/utils.js:37 
([object Array])@src/mongo/shell/collection.js:866 
@(shell):10 

uncaught exception: aggregate failed: { 
    "errmsg" : "exception: the $hour operator does not accept an object as an operand", 
    "code" : 16021, 
    "ok" : 0 
} 

誰能幫助我?

+0

它工作正常對於我來說MongoDB 3.0.2。你使用什麼版本? – JohnnyHK

+0

db.version() 2.4.6 –

回答

0

只要有兩個獨立的$project管道,你計算領域與日期減去與第一$project流水線階段,然後三個小時下一流水線步然後應用$hour操作上,以新的減3小時日期。

假設你有插入用於測試目的下面的測試文件:

db.test.insert([ 
    {"created_at" : ISODate("2014-06-03T02:51:42.000Z")}, 
    {"created_at" : ISODate("2014-06-04T11:23:17.000Z")} 
]) 

上述聚合管道,讓您從日期小時部分減三應遵循:

db.test.aggregate([ 
    { 
     $project: 
     { 
      _id: 0, 
      created_at : 1, 
      date_minus_3 : {$subtract:["$created_at",3*60*60*1000]}, 
      hour_from_original: { $hour: "$created_at" } 
     } 
    }, 
    { 
     $project: 
     { 
      _id: 0, 
      created_at : 1, 
      date_minus_3 : 1, 
      hour_from_original: 1, 
      hour_from_date_minus_3 : { $hour: "$date_minus_3" } 
     } 
    } 
]); 

結果

/* 0 */ 
{ 
    "result" : [ 
     { 
      "created_at" : ISODate("2014-06-03T02:51:42.000Z"), 
      "date_minus_3" : ISODate("2014-06-02T23:51:42.000Z"), 
      "hour_from_original" : 2, 
      "hour_from_date_minus_3" : 23 
     }, 
     { 
      "created_at" : ISODate("2014-06-04T11:23:17.000Z"), 
      "date_minus_3" : ISODate("2014-06-04T08:23:17.000Z"), 
      "hour_from_original" : 11, 
      "hour_from_date_minus_3" : 8 
     } 
    ], 
    "ok" : 1 
} 
+1

工作完美,非常感謝你 –

相關問題