Запрос массива в проекции в Spring Data - PullRequest
0 голосов
/ 14 мая 2018

Учитывая этот набор данных:

{
 "lstLikeUserid" : ["5992dc5725ac203acfa101e6"],
 "title" : "a title" 
},
{ 
 "lstLikeUserid" : ["6000dc5725ac203acfa101e6"],
 "title" : "another title"
}

Я хочу создать вычисляемое поле, чтобы указать, что в массиве lstLikeUserid присутствует идентификатор пользователя.

Вот код, который я используюкоторый не работает:

 String userId  ="5992dc5725ac203acfa101e6";
 ConditionalOperators.Cond condOperation = 
 ConditionalOperators.when(Criteria.where("lstLikeUserid").is(userId))
            .then("true")
            .otherwise("false");
 ProjectionOperation projectOperation = 
 Aggregation.project().and(condOperation).as("like").andInclude("title");
 Aggregation aggregation
            = Aggregation.newAggregation(projectOperation);
 AggregationResults<ChannelItemEntry> result = mongoTemplate
            .aggregate(aggregation,ChannelItemEntry.class,  ChannelItemEntry.class);

Вычисленное поле «like» всегда ложно, даже если идентификатор пользователя совпадает.

1 Ответ

0 голосов
/ 14 мая 2018

Вы должны использовать $ unwind в поле lstLikeUserid перед его фильтрацией.

...