2013-04-29 2 views
0

Mongo에서 sql과 같은 쿼리를 작성하는 방법을 배우려는 노력으로이 집계 프레임 워크를 발견했습니다. 코드를 실행할 때 'columns'에는 숫자가 있지만 평균은 항상 '0' 내가 이해한다면 mongoDB는 문자열 (모든 SQL Server 데이터베이스에서 mongoDB로 전송 된 정수)의 모든 값을 저장하므로 MongoDB로 작업 할 때 실제로 타입을 신경 쓰지 않아도됩니까? 누군가 내 평균 기능이 작동하지 않는 이유를 알 수 있습니까? 주문 수량은 1.000000 - 7.000000 사이의 숫자입니다.MongoDB의 집계 문제

DBCollection order = db.getCollection("Orderstatus"); 


DBObject match = new BasicDBObject("$match", new BasicDBObject("Company", "100")); 


DBObject fields = new BasicDBObject("Facility", 1); 
fields.put("Ordered quantity", 1); 
fields.put("_id", 0); 
DBObject project = new BasicDBObject("$project", fields); 

DBObject groupFields = new BasicDBObject("_id", "$Facility"); 
groupFields.put("average", new BasicDBObject("$avg", "$Ordered quantity")); 
DBObject group = new BasicDBObject("$group", groupFields); 


AggregationOutput output = order.aggregate(match, project,group); 
System.out.println(output); 

것은 내가들은 아래의 코드를 사용하여 정수로 저장됩니다 내 SQL 서버 데이터베이스에서 그들을 가지고 있기 때문에 숫자가 정수로 될 것이라고 생각한다는 것입니다. 나는 값을 얻을 때 getString()을 사용한다는 것을 알게되었는데, 그 이유는 숫자가 mongodb의 문자열이기 때문입니까? 어떻게 정수로 얻을 수 있습니까 ?? 나는 숫자로 그들을 조작 할 수 있기를 정말로 원한다! 이런 일이

StringBuilder orderstatus = new StringBuilder(); 
orderstatus.append("SELECT * FROM dbo.fact_orderstatus"); 
PreparedStatement t = connect.prepareStatement(orderstatus.toString()); 
DBCollection orderstat = db.getCollection("Orderstatus"); 
ResultSet v = t.executeQuery(); 
ResultSetMetaData rsm = t.getMetaData(); 
int column = rsm.getColumnCount(); 

while (v.next()) { 
BasicDBObject orderObj = new BasicDBObject(); 
for(int x=1; x<column +1; x++){ 
String namn= rsm.getColumnName(x); 

String custNum = (v.getString(x)); 
if (custNum != null && !custNum.trim().isEmpty() 
&& custNum.length() != 0) 
orderObj.append(namn, custNum); 

} 


orderstat.insert(orderObj) 
+1

유형에 대한 이해가 잘못되었습니다. 숫자를 문자열로 저장하면 숫자를 평균 처리하는 등 숫자로 조작 할 수 없습니다. 숫자를 숫자로 저장하십시오 (따옴표 없음) –

답변

0

이유는 MongoDB를 가 저장 값의 유형에 대해 관리를 수행한다는 것입니다.

숫자를 저장하려면 숫자를 저장하지 않으려면 따옴표로 묶지 말고 문자열로 저장하면 숫자로 조작 할 수 없게됩니다.

자바 스크립트 역시 숫자와 문자열을 구분하지만 MongoDB는 간단한 자바 스크립트보다 많은 숫자 유형을 지원합니다. 자세한 내용은 here을 참조하십시오.

+0

getString() 대신 getInt를 사용하여 유형을 보존 할 수 있습니다. –

+0

감사합니다. Asya! 내가 소스 데이터베이스에서 데이터를 얻는 방법을 보여주는 코드를 추가했다. 정수와 getString을 getInt 할 필요가있다. if 문과 parseInt를 넣어서 값이 정수인 경우 getInt 만 사용하려고했다. 그러나 나는 단지 그것을 이해할 수 없다! 모든 데이터 유형이 mongoDB에 올바르게 입력되도록하는 쉬운 방법을 알고 계십니까? – glaring

+0

mySQL에서 데이터를 가져 오는 것이 MongoDB와 관련이 없으므로 별도의 Java 질문을 열어 두는 것이 좋습니다.이 질문에 대한 토론에 있어서는 안됩니다. –

관련 문제