diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java index c6b515aa60f..a392a8ac91c 100644 --- a/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java +++ b/vector-stores/spring-ai-mongodb-atlas-store/src/main/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStore.java @@ -240,7 +240,7 @@ private org.bson.Document createSearchIndexDefinition() { * @return the Spring AI Document */ private Document mapMongoDocument(org.bson.Document mongoDocument, float[] queryEmbedding) { - String id = mongoDocument.getString(ID_FIELD_NAME); + String id = mongoDocument.getObjectId(ID_FIELD_NAME).toHexString(); String content = mongoDocument.getString(CONTENT_FIELD_NAME); double score = mongoDocument.getDouble(SCORE_FIELD_NAME); Map metadata = mongoDocument.get(METADATA_FIELD_NAME, org.bson.Document.class); diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStoreIT.java b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStoreIT.java index 1f61bdf09ad..16ec5fa29ce 100644 --- a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStoreIT.java +++ b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/mongodb/atlas/MongoDBAtlasVectorStoreIT.java @@ -310,6 +310,30 @@ void getNativeClientTest() { }); } + @Test + void shouldHandleObjectIdInSearchResults() { + this.contextRunner.run(context -> { + VectorStore vectorStore = context.getBean(VectorStore.class); + + Document doc1 = new Document("Test content for ObjectId handling"); + Document doc2 = new Document("Another test content for ObjectId handling"); + vectorStore.add(List.of(doc1, doc2)); + Thread.sleep(5000); + + List results = vectorStore + .similaritySearch(SearchRequest.builder().query("Test content").topK(5).build()); + + assertThat(results).hasSize(2); + results.forEach(result -> { + String id = result.getId(); + assertThat(id).isNotNull(); + assertThat(id).matches("^[0-9a-fA-F]{24}$"); + assertThat(result.getText()).contains("Test content"); + assertThat(result.getMetadata()).containsKey(DocumentMetadata.DISTANCE.value()); + }); + }); + } + public static String getText(String uri) { var resource = new DefaultResourceLoader().getResource(uri); try {