Извините, что беспокою вас, но я не могу найти рабочее решение моего вопроса. Я хочу сделать запрос MongoDB, который дает мне те же результаты из запроса SQL:
SELECT MIN(ZIP) AS MIN, MAX(ZIP) AS MAX FROM table WHERE BUSINESS_STATE_TERRITORY='Arizona'
Прежде всего, я запрашиваю базу данных из Java с помощью драйвера mongodb java версии 3.6.
Я пробовал это решение из Как найти минимальное значение в mongodb
db.sales.aggregate(
[
{
$group:
{
_id: "$item",
minQuantity: { $min: "$quantity" }
}
}
]
)
В Java:
Document min = new Document("$min","$ZIP");
Document max = new Document("$max","$ZIP");
Document group = new Document("$group", new Document("_id","$Business_State_Territory").append("minimum",min).append("maximum",max));
Document match = new Document("$match", new Document("Business_State_Territory","Arizona"));
AggregateIterable output = coll.aggregate(Arrays.asList(match,group));
MongoCursor<Document> cur = output.iterator();
while(cur.hasNext()){
Document next = cur.next();
System.out.println(next.toString());
}
результат:
Document{{_id=Arizona, minimum=1608, maximum=null}}
Но это не оценка максимального значения, то есть 99701.
Все документы в коллекциях имеют следующую структуру:
_id:5ad0aea8471aa1aa7f425885
NPI:1003000142
CCN:""
Provider_Type:"EP"
Business_State_Territory:"Ohio"
ZIP:43623
Specialty:"Pain Medicine"
Hospital_Type:""
Program_Type:"Medicare"
Program_Year:2016
Provider_Stage_Number:"Stage 2"
Payment_Year:3
Attestation_Month:2
Attestation_Year:2017
MU_Definition_2014:""
Stage_2_Scheduled_2014:0
EHR_Certification_Number:"1314E01QPVPIEAN"
EHR_Product_CHP_Id:"CHP-027887"
Vendor_Name:"Epic Systems Corporation"
EHR_Product_Name:"EpicCare Ambulatory 2014 Certified EHR Suite"
EHR_Product_Version:"Epic 2015"
Product_Classification:"Complete EHR"
Product_Setting:"Ambulatory"
Product_Certification_Edition_Yr:2014
Надеюсь, вы мне поможете.
Начать редактирование:
Я попытался использовать $ project вместо $ group только с предложением max. Теперь итоговые документы имеют структуру:
Document{{_id=5ad0aea8471aa1aa7f425955, Business_State_Territory=Arizona, maximum=85255}}
Как видите, максимальное значение не пустое, но значения не представляют максимальное значение. Странно также то, что некоторые документы:
Document{{_id=5ad0aea9471aa1aa7f426881, Business_State_Territory=Arizona, maximum=}}
Может ли mongodb интерпретировать это пустое значение как максимальное значение? На docs.mongodb.com он говорит: Если некоторые, но не все документы для операции $ max имеют либо нулевое значение для поля, либо пропускают поле, оператор $ max рассматривает только ненулевое и не пропущенные значения для поля. Таким образом, ответ должен быть «нет», пустое значение не принимается за результат запроса. Это ошибка?