GH-8779: MongoDbMS Fix distinct result conversion (#8781)

Fixes https://github.com/spring-projects/spring-integration/issues/8779

The `MongoTemplate` has now a `findDistinct()` API with a smart
result conversion instead of native driver plain expectations

**Cherry-pick to `6.1.x` & `6.0.x`**
This commit is contained in:
Artem Bilan
2023-10-26 15:29:03 -04:00
committed by Gary Russell
parent 991d29eb15
commit 6ec2b88e1b
3 changed files with 5 additions and 5 deletions

View File

@@ -239,8 +239,9 @@ public class ConfigurableMongoDbMessageStore extends AbstractConfigurableMongoDb
@Override
public Iterator<MessageGroup> iterator() {
Query query = Query.query(Criteria.where(MessageDocumentFields.GROUP_ID).exists(true));
Iterable<String> groupIds = getMongoTemplate().getCollection(collectionName)
.distinct(MessageDocumentFields.GROUP_ID, query.getQueryObject(), String.class);
Iterable<Object> groupIds =
getMongoTemplate()
.findDistinct(query, MessageDocumentFields.GROUP_ID, this.collectionName, Object.class);
return StreamSupport.stream(groupIds.spliterator(), false)
.map(this::getMessageGroup)

View File

@@ -367,8 +367,7 @@ public class MongoDbMessageStore extends AbstractMessageGroupStore
Query query = Query.query(Criteria.where(GROUP_ID_KEY).exists(true));
Iterable<String> groupIds = this.template.getCollection(this.collectionName)
.distinct(GROUP_ID_KEY, query.getQueryObject(), String.class);
Iterable<Object> groupIds = this.template.findDistinct(query, GROUP_ID_KEY, this.collectionName, Object.class);
for (Object groupId : groupIds) {
messageGroups.add(getMessageGroup(groupId));

View File

@@ -374,7 +374,7 @@ public abstract class AbstractMongoDbMessageGroupStoreTests implements MongoDbCo
Message<?> message = new GenericMessage<>("1");
store2.addMessagesToGroup("1", message);
store1.addMessagesToGroup("2", new GenericMessage<>("2"));
store2.addMessagesToGroup("3", new GenericMessage<>("3"));
store2.addMessagesToGroup(UUID.randomUUID(), new GenericMessage<>("3"));
MessageGroupStore store3 = this.getMessageGroupStore();
Iterator<MessageGroup> iterator = store3.iterator();