2016-11-10 18 views
0

Actully私はフロントエンドからmongoに日付を送ります。そしてそれは日付を1だけ減らします。私は復帰時に正しい日付を返しますが、$からのデータを集計すると$月、$年のプロパティでは、より少ない日付値に従って集計を実行します。なぜですか? これが問題ない場合は、正確な集計を実行するソリューションを教えてください。 集約のためのコードは、 - 予め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ドライバだと思います。データを保存するときにデータを取得するときに日付を修正します。バランスは大丈夫です。

アグリゲーションの問題は、Mongoサーバー上で実行される操作の集合(実際には配列)であり、mongoサーバーはドライバが適用したスマート性を認識しないため、そこに格納され、したがってミスマッチです。

ドライバは問題に陥り、アグリゲーションやマップリダクションを助けることができます。

私の頭の上には解決策がありませんが、集計の投影部分の動作を調整しようとすることができます。あなたは、どの基本ドライバーが1日減らしているかを見なければなりませんか?それはサーバーのタイムゾーンに基づいていますか?答えが得られたら、プロジェクトを操作して集計にバランシングアクトを追加できます。

私はそれが汚れている(汚れていると読んでいる)と理解していますが、それでも異なるモンゴーのドライバーは改善していますし、調整する必要があります。