У меня такой рабочий запрос:
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());
}
выглядит нормально: [ { "$unwind" : { "path" : "$shops" , "preserveNullAndEmptyArrays" : true}} , { "$match" : { "shops.user" : { "$oid" : "5c04b943ff491824b806686a"}}} , { "$lookup" : { "from" : "likedShops" , "localField" : "_id" , "foreignField" : "shop" , "as" : "shops"}}] in collection shops




Порядок значений параметров метода newAggregation должен быть следующим:
Aggregation aggregation = Aggregation
.newAggregation(lookupOperation, unwindOperation, Aggregation.match(Criteria.where("shops.user")
.is(new ObjectId(userId))));
Я бы начал с включения ведения журнала
logging.level.org.springframework.data.mongodb.core.MongoTemplate=DEBUG, а затем просмотрел фактический запрос MongoDB, выполняемый Spring, и сравнил его с вашим запросом Mongo, который вы пытаетесь преобразовать.