我試圖學習如何在Mongo中製作類似於查詢的SQL,並發現這個聚合框架,當我運行代碼時,雖然「列」中包含數字,但平均值始終爲「0」如果我明白了吧mongoDB將所有值保存爲一個字符串(在我的sql服務器數據庫中我首先將整數轉換爲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 Server數據庫得到了他們。我現在看到我在使用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)
您對類型的理解不正確 - 如果將數字存儲爲字符串,則無法將它們作爲數字進行處理,包括對其進行平均處理。確保將數字存儲爲數字(不包括引號!) – 2013-04-29 18:57:00