Как получить все ключи коллекции, которые содержат определенное (String) значение в mongodb, используя весеннюю загрузку

Предположим, у меня есть коллекция, т.е. A.

Я хочу получить все ключи к этой коллекции, которые имеют определенное значение, например, привет

   {
      "a": "its me hello",
      "b": "it does not have value",
      "c": "It has hello"
   }

В этом случае я хочу запросить, чтобы вернуть ключи a и c. Которая содержит строку hello.

Как это сделать при весенней загрузке?

Я получил ответ на этот вопрос для оболочки mongo. Ссылка на ответ, который работает в оболочке монго.

Но не удалось преобразовать его в весеннюю загрузку с помощью MongoRepository.

Я пробую следующий код -

try {
            MongoClientURI uri = new MongoClientURI(connectionRequest.getUri());
            MongoClient mongoClient = new MongoClient(uri);
            for (String databaseName : mongoClient.listDatabaseNames()) {
                logger.info("***Database: ***" + databaseName);
                MongoDatabase database = mongoClient.getDatabase(databaseName);
                if(database.getName().equals("forum")|| database.getName().equals("kidsventure")) {
                    MongoIterable<String> collections = database.listCollectionNames();
                    for (String collectionName : collections) {
                        logger.info("***Collection: ***" + collectionName);
                        MongoCollection<Document> mongoCollection = database.getCollection(collectionName);
                        Aggregation aggregation = Aggregation.newAggregation(Aggregation.project(Aggregation.ROOT), Aggregation.match(Criteria.where(connectionRequest.getWord())));
                        System.out.println(aggregation);
                        Iterable<Document> fields = mongoCollection.find();
                        fields.forEach(field -> {
                            String json = field.toJson();
                            JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();
                            for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
                                System.out.println("***key***" + entry.getKey() + "***value***" + entry.getValue().toString());
                                System.out.println(entry.getValue().toString().toLowerCase().equals(connectionRequest.getWord().toLowerCase()));
                                System.out.println(entry.getValue().getAsString().toLowerCase().equals(connectionRequest.getWord().toLowerCase()));
                            }
//                            for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
//                                if (entry.getValue().getAsString().equals(connectionRequest.getUri())) {
//                                    System.out.println("***key***" + entry.getKey());
//                                }
//                            }
                        });
                    }
                }
            }
        } catch (Exception e) {
            logger.info("***Error connecting!***" + e.getMessage());
        }

person Anuresh Verma    schedule 15.01.2021    source источник
comment
Возвращает ли вложенный результат результат?   -  person Gibbs    schedule 15.01.2021
comment
На данный момент он возвращает все ключи. Вместо только ключей, у которых есть соответствующая строка.   -  person Anuresh Verma    schedule 15.01.2021
comment
Вы используете шаблон монго? Если вы его используете, вам не понадобится столько кода, его легко реализовать в несколько строк   -  person varman    schedule 15.01.2021


Ответы (1)


AggregateIterable<Document> queryResult = mongoCollection.aggregate(Arrays.asList (new Document("$project", new Document("data", new Document("$objectToArray", "$$ROOT"))),new Document("$unwind", "$data"),new Document("$match", new Document("data.v",new Document("$regex", "hello")))));

Справочник

person Mohit Chandani    schedule 02.02.2021