2016-11-10 1 views
0

Actully 내가 프런트 엔드에서 mongo로 날짜를 보내면 날짜가 1 씩 줄어 듭니다. 다시 검색하면 올바른 날짜가 표시되지만 월 및 연도에 따라 집계를 $ month, $ 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 드라이버라고 생각합니다. 데이터를 저장할 때 데이터를 가져올 때 날짜를 수정합니다. 그래서 균형은 괜찮습니다.

집계의 문제점은 집계가 Mongo 서버 자체에서 실행되는 조작 (실제로 배열)으로 설정되어 있고 mongo 서버가 드라이버가 적용한 스마트 성을 알지 못하므로 어떤 데이터로든 연산을 계산합니다. 거기에 저장되고 따라서 불일치.

드라이버가 문제를 일으키고 도움이 될 때까지 도움을 주며 집계 나지도 축소로 더 이상 도움을 줄 수 없습니다.

내 머리 꼭대기에 아무런 해결책도 없지만 집계의 투영 부분에서 동작을 조정할 수는 있습니다. 어느 기초 운전자가 하루를 줄이고 있는지보아야합니까? 서버 시간대를 기반으로합니까? 대답을 얻은 후에는 프로젝트를 조작하여 집계에 균형 작업을 추가 할 수 있습니다.

나는 그것이 더러운 (부정한 것을 읽는다) 것을 이해한다. 그러나 그 다음 다른 Mongo 운전자는 아직도 개선하고 있고, 그때까지 우리는 'adjust'해야한다.