From e6c12a1b02821f3e8a0ab91c99abcb77f309ec6d Mon Sep 17 00:00:00 2001 From: Bar Nuri Date: Mon, 17 Nov 2025 14:02:38 +0200 Subject: [PATCH 1/6] feat_add_search_by_vector --- .../langchain_mongodb/vectorstores.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py index a1adf7e5..a064ea52 100644 --- a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py +++ b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py @@ -882,3 +882,15 @@ def create_vector_search_index( wait_until_complete=wait_until_complete, **kwargs, ) # type: ignore [operator] + + def similarity_search_by_vector( + query_vector: list[float], + *args: Any, + **kwargs: Any, + ) -> list[Document]: + tuple_list = self.vector_store._similarity_search_with_score( + query_vector, + *args, + **kwargs, + ) + return [doc for doc, _ in tuple_list] From 7ed76008a1be972575b721f8f3650fbd2651bc1a Mon Sep 17 00:00:00 2001 From: Bar Nuri Date: Wed, 19 Nov 2025 16:33:13 +0200 Subject: [PATCH 2/6] CR --- .../langchain_mongodb/vectorstores.py | 1 + .../test_vectorstore_from_texts.py | 38 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py index a064ea52..81a42bae 100644 --- a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py +++ b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py @@ -884,6 +884,7 @@ def create_vector_search_index( ) # type: ignore [operator] def similarity_search_by_vector( + self, query_vector: list[float], *args: Any, **kwargs: Any, diff --git a/libs/langchain-mongodb/tests/integration_tests/test_vectorstore_from_texts.py b/libs/langchain-mongodb/tests/integration_tests/test_vectorstore_from_texts.py index 4266f4e0..59b931dc 100644 --- a/libs/langchain-mongodb/tests/integration_tests/test_vectorstore_from_texts.py +++ b/libs/langchain-mongodb/tests/integration_tests/test_vectorstore_from_texts.py @@ -117,3 +117,41 @@ def test_search_pre_filter( "Sandwich", k=3, pre_filter={"c": {"$gt": 0}} ) assert len(matches_filter) == 1 + + +def test_similarity_search_by_vector( + vectorstore: PatchedMongoDBAtlasVectorSearch, + embeddings: Embeddings, + texts: List[str], +) -> None: + # Test similarity_search_by_vector method + # First, embed a query text to get a vector + query_text = "Sandwich" + query_vector = embeddings.embed_query(query_text) + + # Perform search by vector + output = vectorstore.similarity_search_by_vector(query_vector, k=2) + + # Should return results + assert len(output) == 2 + # Results should be Document objects + assert all(hasattr(doc, "page_content") for doc in output) + assert all(hasattr(doc, "metadata") for doc in output) + + +def test_similarity_search_by_vector_with_filter( + vectorstore: PatchedMongoDBAtlasVectorSearch, + embeddings: Embeddings, +) -> None: + # Test similarity_search_by_vector with pre_filter + query_text = "Sandwich" + query_vector = embeddings.embed_query(query_text) + + # Search with filter + filtered_output = vectorstore.similarity_search_by_vector( + query_vector, k=3, pre_filter={"c": {"$gt": 0}} + ) + + # Should only return documents matching the filter + assert len(filtered_output) == 1 + assert "c" in filtered_output[0].metadata From a956dc09f5a9c94cb7a0925cba759a43ad68b58c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Nov 2025 20:19:55 +0000 Subject: [PATCH 3/6] Initial plan From c46ded337bd01d810cb94a0546575a5449651728 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Nov 2025 20:24:14 +0000 Subject: [PATCH 4/6] Add docstring to similarity_search_by_vector method Co-authored-by: barnuri <13019522+barnuri@users.noreply.github.com> --- .../langchain_mongodb/vectorstores.py | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py index 288ab629..e50ea8a3 100644 --- a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py +++ b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py @@ -877,6 +877,26 @@ def similarity_search_by_vector( *args: Any, **kwargs: Any, ) -> list[Document]: + """Return MongoDB documents most similar to the given query vector. + + Atlas Vector Search eliminates the need to run a separate + search system alongside your database. + + Args: + query_vector: Embedding vector to search for. + k: (Optional) number of documents to return. Defaults to 4. + pre_filter: List of MQL match expressions comparing an indexed field + post_filter_pipeline: (Optional) Pipeline of MongoDB aggregation stages + to filter/process results after $vectorSearch. + oversampling_factor: Multiple of k used when generating number of candidates + at each step in the HNSW Vector Search. + include_embeddings: If True, the embedding vector of each result + will be included in metadata. + kwargs: Additional arguments are specific to the search_type + + Returns: + List of documents most similar to the query vector. + """ tuple_list = self.vector_store._similarity_search_with_score( query_vector, *args, From d27c34ac8714764b62f9acda79b5b2eabd349721 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Nov 2025 21:07:19 +0000 Subject: [PATCH 5/6] Initial plan From 5105229e5e9654dbce6650b84adf3ec8ac99cd7d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 24 Nov 2025 21:14:46 +0000 Subject: [PATCH 6/6] Fix type checker errors in similarity_search_by_vector Co-authored-by: barnuri <13019522+barnuri@users.noreply.github.com> --- .../langchain_mongodb/vectorstores.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py index e50ea8a3..9437150e 100644 --- a/libs/langchain-mongodb/langchain_mongodb/vectorstores.py +++ b/libs/langchain-mongodb/langchain_mongodb/vectorstores.py @@ -873,8 +873,8 @@ def create_vector_search_index( def similarity_search_by_vector( self, - query_vector: list[float], - *args: Any, + embedding: list[float], + k: int = 4, **kwargs: Any, ) -> list[Document]: """Return MongoDB documents most similar to the given query vector. @@ -883,7 +883,7 @@ def similarity_search_by_vector( search system alongside your database. Args: - query_vector: Embedding vector to search for. + embedding: Embedding vector to search for. k: (Optional) number of documents to return. Defaults to 4. pre_filter: List of MQL match expressions comparing an indexed field post_filter_pipeline: (Optional) Pipeline of MongoDB aggregation stages @@ -897,9 +897,9 @@ def similarity_search_by_vector( Returns: List of documents most similar to the query vector. """ - tuple_list = self.vector_store._similarity_search_with_score( - query_vector, - *args, + tuple_list = self._similarity_search_with_score( + embedding, + k=k, **kwargs, ) return [doc for doc, _ in tuple_list]