Я пытаюсь сделать запрос к mongodb, используя 4 параметра: диапазон дат и два равных целочисленных параметра, я использовал это руководство по mkyong в качестве руководства. https://www.mkyong.com/mongodb/java-mongodb-query-document/ и до сих пор были в состоянии написать метод, который использует три параметра:
public List<JSONObject> readByThreeParams(String param, String value, String paramTwo, String valueTwo, String paramThree, String valueThree)
{
setupProperties();
devicesJsonList.clear();
objectString.clear();
BasicDBObject query = new BasicDBObject();
List<BasicDBObject>objList = new ArrayList<>();
int valInt = Integer.parseInt(value);
LocalDateTime formattedStartTime = dtFormatter.formatTimeFromString(valueTwo);
LocalDateTime formattedEndTime = dtFormatter.formatTimeFromString(valueThree);
BasicDBObject startTimeQuery = new BasicDBObject("when", new BasicDBObject("$gt", formattedStartTime));
BasicDBObject endTimeQuery = new BasicDBObject("when", new BasicDBObject("$lt", formattedEndTime));
objList.add(new BasicDBObject(param,valInt));
objList.add(startTimeQuery);
objList.add(endTimeQuery);
query.put("$and",objList);
DBCursor cursor = collection.find(query);
while(cursor.hasNext())
{
devicesJsonList.add(cursor.next().toString());
}
for(String string : devicesJsonList)
{
JSONObject object = mongoParser.convertIncomingStringToJSONObjects(string);
objectString.add(object);
}
return objectString;
}
ПРИМЕЧАНИЕ. - Передано шесть параметров, поскольку три из них являются значениями перечисления, которыебудет диктовать типы переменных
Однако при передаче четвертого значения оно просто игнорируется mongodb и выдает те же значения, что и код, приведенный выше. Я до сих пор связывал добавление его в существующий objList и разбиение его на новый список, чтобы в objList было два объекта BasicDBObject, и помещал запросы времени в другой список, прежде чем добавить их оба в запрос в конце.
Например:
objlist.add(param, value);
objList.add(startTimeQuery);
objList.add(endTimeQuery);
objList.add(paramFour, valueFour); //new int value
query.put("$and", objList);
и
objlist.add(param,value);
objList.add(paramFour, valueFour); //new int value
timeList.add(startTimeQuery);
timeList.add(endTimeQuery);
query.put("$and", objList);
query.put("$and", timeList);
Я также пробовал этот последний пример кода, используя
query.append("$and", timeList);