2016-11-10 79 views
0

實際上,我從我的前端發送日期到mongo,然後它將日期減少1,當我回顧時,它會給出正確的日期,但是當我們根據月份和年份從$月,$ year屬性,它會根據日期值進行聚合爲什麼? 如果沒問題,那麼給我解決方案來執行正確的聚合。 彙總代碼是 -在MongoDB中的ISO日期

DBObject projectFields = new BasicDBObject(); 
     projectFields.put("creationDate","$creationDate"); 
     projectFields.put("month",new BasicDBObject("$month", "$creationDate")); 
     projectFields.put("year",new BasicDBObject("$year", "$creationDate")); 
     projectFields.put("day",new BasicDBObject("$dayOfMonth", "$creationDate")); 
     projectFields.put("batchQty","$batchQty"); 
     DBObject projectObj = new BasicDBObject("$project", projectFields); 
     DBObject groupIdFieldsObj = new BasicDBObject(); 
     groupIdFieldsObj.put("month","$month"); 
     groupIdFieldsObj.put("year","$year"); 
     groupFieldsObj.put("_id", groupIdFieldsObj); 
     DBObject groupSumFieldsObj = new BasicDBObject(); 
     groupSumFieldsObj.put("$sum", "$batchQty"); 
     groupFieldsObj.put("batchQty", groupSumFieldsObj); 
     DBObject groupObj = new BasicDBObject("$group", groupFieldsObj); 
     DBObject outCollObj = new BasicDBObject(); 
     outCollObj.put("$out", "salesExportData"); 
     coll.aggregate(groupObj,projectObj,outCollObj); 

在此先感謝。

+0

您可以添加一些示例文檔嗎? – Veeram

回答

0

我只是在猜測,但我認爲它是應用程序中的mongoDB驅動程序,它會在您存儲數據時縮短數據獲取時的日期。所以平衡是沒問題的。

那麼聚合的問題是,Aggregation是在Mongo服務器本身上運行的操作集合(實際上是數組),而mongo服務器不知道你的驅動程序應用了多少智能,因此它用任何數據計算操作被存儲在那裏,因此不匹配。

您的驅動程序會使您遇到問題並幫助您,直到它可以幫助您,並且無法幫助您進一步處理聚合或map-reduce。

我無法得到任何解決方案在我頭上,但你可以嘗試調整投影部分聚合的行爲。你需要看看駕駛員有一天會減少什麼?它基於服務器時區嗎?一旦你得到你的答案,你可以通過操縱項目在你的聚合中添加一個平衡行爲。

我明白它看起來髒(讀不清),但不同的蒙古司機仍然在改善,直到那時我們必須'調整'。