Я пытаюсь получить все документы из коллекции mongodb, которые были изменены за последние 5 минут только с определенными полями (скажем, field1, field2, field3 и т. Д.).Как написать выражение LiteralExpression для получения определенных полей (проекций)?
Мои текущие выражения Literal возвращают документы, содержащие все поля (_id - метка времени создания документа в моей коллекции):
public String getLiteralExpression(){
long innerBoundary = Instant.now().minus(5, ChronoUnit.MINUTES).toEpochMilli();
long outerBoundary = Instant.now().toEpochMilli();
String expression = new StringBuilder()
.append("{'_id': {'$gt': ")
.append(innerBoundary)
.append(", '$lt' : ")
.append(outerBoundary)
.append("}}")
.toString();
return expression;
}
}
Какиевызывается в InboundChannelAdapter как
@Bean
@InboundChannelAdapter(value = "pubSubChannel", poller = @Poller(fixedRate = "30000"))
public MessageSource<Object> DbReadingMessageSource() {
Expression expression = new SpelExpressionParser().parseExpression("@myBean.getLiteralExpression()");
MongoDbMessageSource messageSource = new MongoDbMessageSource(mongoTemplate, expression);
messageSource.setCollectionNameExpression(new LiteralExpression(mongoTemplate.getCollectionName(MyEntity.class)));
IntegrationFlows.from(messageSource);
return messageSource;
}
Есть ли способ, где я могу просто использовать MongoTemplate или MongoDbFactory вместо LiteralExpression для извлечения только определенных полей (проекция) в форме MongoDbMessageSource или любого другого формата, который может бытьподается в мой конвейер pubsubChannel.