Доступ к mogodb из Java-проекта с помощью com.mongodb - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь сделать запрос к 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); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...