Как вернуть только 1 поле в MongoDB? - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь получить номер заказа, в котором идентификатор транзакции равен другой переменной в моем коде. Моя коллекция дорожных будок выглядит так

tolls.booths

В моем коде def boothsException = booths.find([ "pings.loc.transactionId": tollEvent.id, "pings.loc.order":1] as BasicDBObject).iterator() println boothsException

Я получаю boothsException = DBCursor{collection=DBCollection{database=DB{name='tolls'} Я бы По сути, я хочу сказать get where transactionId = 410527376 и дать мне этот номер заказа в boothsException (5233423).

1 Ответ

2 голосов
/ 07 мая 2020

Используется MongoDB Java Driver v3.12.2 .

Код извлекает значение из возвращенного курсора. Я использую более новые API, поэтому вы обнаружите некоторые различия в именах классов.

int transId = 410527376;    // same as tollEvent.id

MongoCursor<Document> cursor = collection
                                   .find(eq("pings.loc.transactionId", transId))
                                   .projection(fields(elemMatch("pings.loc.transactionId"), excludeId()))
                                   .iterator();
while (cursor.hasNext()) {
    Document doc = cursor.next();
    List<Document> pings = doc.get("pings", List.class);
    Integer order = pings.get(0).getEmbedded(Arrays.asList("loc","order"), Double.class).intValue();
    System.out.println(order.toString());    // prints 5233423
}


ПРИМЕЧАНИЯ:

Запрос с проекцией получает следующий вложенный документ из массива pings:

"pings" : [
                {
                    "upvote" : 575,
                    "loc" : {
                            "type" : "2dsphere",
                            "coordinates" : [ .... ],
                            "transactionId" : 410527376,
                            "order" : 5233423
                    },
                    ...
            }
]

Остающийся код с зацикливанием курсора предназначен для извлечения из него значения order.

Ниже приведены импорт , используемый с фильтром и проекцией метода find:

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Projections.*;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...