Я пытаюсь научиться делать sql-запросы в Mongo и обнаружил эту структуру агрегации, когда я запускаю код, среднее всегда получается «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, где они хранятся в виде целых чисел, используя код, приведенный ниже. Теперь я вижу, что я использую 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)
Ваше понимание типов неверно - если вы храните цифры как строку, вы не сможете манипулировать ими как номерами, в том числе усреднять их. Убедитесь, что вы сохранили свои номера в виде чисел (без кавычек!) –