Преобразование запроса mongoDB в запрос Spring Data

У меня такой рабочий запрос:

db.shops.aggregate([
{
    $lookup:{
        from: "likedShops",
        localField: "_id",
        foreignField: "shop",
        as: "shops"
    }
},
{ 
    $unwind: { path: "$shops", preserveNullAndEmptyArrays: true }
},
{
    $match: { 'shops.user': ObjectId("5c04b943ff491824b806686a") }
}
])

Я пытаюсь выполнить следующее в моем проекте весенней загрузки, но размер результата равен 0, должен быть 2:

public void shopList() {
        LookupOperation lookupOperation = LookupOperation.newLookup()
                .from("likedShops")
                .localField("_id")
                .foreignField("shop")
                .as("shops");
        UnwindOperation unwindOperation = Aggregation.unwind("shops", true);

        Aggregation aggregation = Aggregation.newAggregation(unwindOperation, Aggregation.match(Criteria.where("shops.user").is(new ObjectId("5c04b943ff491824b806686a"))), lookupOperation);
        List<Shop> results = mongoTemplate.aggregate(aggregation, "shops", Shop.class).getMappedResults();
        LOGGER.info("Obj Size " + results.size());
    }

Я бы начал с включения ведения журнала logging.level.org.springframework.data.mongodb.core.MongoTem‌​plate=DEBUG, а затем просмотрел фактический запрос MongoDB, выполняемый Spring, и сравнил его с вашим запросом Mongo, который вы пытаетесь преобразовать.

Mark B 05.12.2018 22:28

выглядит нормально: [ { "$unwind" : { "path" : "$shops" , "preserveNullAndEmptyArrays" : true}} , { "$match" : { "shops.user" : { "$oid" : "5c04b943ff491824b806686a"}}} , { "$lookup" : { "from" : "likedShops" , "localField" : "_id" , "foreignField" : "shop" , "as" : "shops"}}] in collection shops

Ayoub k 05.12.2018 22:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
579
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Порядок значений параметров метода newAggregation должен быть следующим:

Aggregation aggregation = Aggregation
                .newAggregation(lookupOperation, unwindOperation, Aggregation.match(Criteria.where("shops.user")
                        .is(new ObjectId(userId))));

Другие вопросы по теме