Что-то мне не хватает в моем агрегате и найти код? - PullRequest
0 голосов
/ 31 марта 2019

Итак, у меня есть рабочий код Python для mongoDB, и для класса, в котором я сейчас нахожусь, я пытаюсь поместить этот код в Java.На данный момент у меня все работает правильно, кроме моей агрегатной части, и команды find, которая должна дать несколько результатов.

Я провел некоторое исследование, которое показало, что оно должно быть в цикле, чтобы правильно его распечатать, но я получаю ту же ошибку.Также я нашел кое-что о том, что, возможно, это курсор, который, возможно, истекает, это довольно большой файл, с которым я работаю, но некоторые результаты для этого не работают, например .noCursorTimeout (true).

Вот мои настройки для агрегата:

public class Aggregate {

    public static Object AggregateDocument(String input) {

        //Get mongo set up
        @SuppressWarnings("resource")
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("market");
        MongoCollection<Document> collection = database.getCollection("stocks");

        //Get the documents set up for each section of the aggregate command
        //Set up the Match
        Document match = new Document("$match", new Document("Sector", input));
        //Set up the Project
        Document project1 = new Document("_id", 1);
        Document project2 = project1.append("Shares Outstanding", 1);
        Document project3 = project2.append("Industry", 1);
        Document project4 = project3.append("Sector", 1);
        Document project = new Document("$project", project4);
        //Set up the Group
        Document group1 = new Document("_id", "$Industry");
        Document group2 = group1.append("Total Outstanding Shares", new Document("$sum", "$Shares Outstanding"));
        Document group = new Document("$group", group2);

        //Call the aggregate command
        AggregateIterable<Document> agg = collection.aggregate(Arrays.asList(match, project, group));

        //Print out the result
        for (Document printAggs : agg)
        {
            System.out.println(printAggs);
        }

        return agg;
    }
}

Вот мой код для моей команды поиска

public class FindStr {

    public static Object FindString(String input) {

        //Get mongo set up
        @SuppressWarnings("resource")
        MongoClient mongoClient = new MongoClient("localhost", 27017);
        MongoDatabase database = mongoClient.getDatabase("market");
        MongoCollection<Document> collection = database.getCollection("stocks");

        //Get the documents set up 
        Document doc1 = new Document("Industry", input);
        Document doc2 = new Document("Ticker", 1);

        //Set up the find() command
        MongoCursor<Document> cursor = collection.find(doc1).projection(doc2).noCursorTimeout(true).iterator();

        //Print out the results
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }


        return cursor;
    }

}

Для команды агрегата я должен получить списокдокументы, которые соответствуют этой совокупности, и почти одинаковы для команды find string.То, что я получаю, похоже на результаты друг друга, например вот что я получаю для вывода строки поиска:

Enter in a string to search for (enter it in quotes), or b to go back: 
"Medical Laboratories & Research"
Mar 30, 2019 5:52:56 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Mar 30, 2019 5:52:56 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
Mar 30, 2019 5:52:56 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:3, serverValue:74}] to localhost:27017
Mar 30, 2019 5:52:56 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[4, 0, 6]}, minWireVersion=0, maxWireVersion=7, maxDocumentSize=16777216, roundTripTimeNanos=477995}
Mar 30, 2019 5:52:56 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:4, serverValue:75}] to localhost:27017

1 Ответ

0 голосов
/ 05 апреля 2019

Итак, я публикую свой ответ, потому что, видимо, код работает нормально.Мои входные данные были неправильными, поскольку я научился настраивать его для MongoDB, настроил его на поиск входных данных, и обычно для json используется формат {"key": "value"}, поэтому при импутациичасть ценности, я хотел, чтобы это было в кавычках для этого.Но, видимо, если вы не поставите его в кавычки, он прекрасно работает как задумано.У меня это хорошо работает в Python, поэтому у меня есть рабочий пример, чтобы посмотреть.Кроме того, эти 1 в части проекта не будут работать, пока я не выведу их обратно в строковый формат и в целочисленный формат, эти 1 действительно означают «истинно», для того чтобы проецировать только эти ключи.

...