преобразование запроса mongoDB в Spring Data query - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть следующий рабочий запрос:

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());
    }

1 Ответ

0 голосов
/ 09 декабря 2018

Порядок параметров метода newAggregation имеет значение, должно быть:

Aggregation aggregation = Aggregation
                .newAggregation(lookupOperation, unwindOperation, Aggregation.match(Criteria.where("shops.user")
                        .is(new ObjectId(userId))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...