In Atlas Vector Search, is it possible to pre-filter by dynamic fields?

Is it possible to do filtering on dynamic fields in Atlas Vector Search? If not, are there any alternatives to do this?

I have a document collection with a schema like this:

{
   ...
    "metadata": {
        "foo": "bar",
       ...
    },
   "embedding": [...] # embedding vector
},

Is it possible to create a vector search index like this?

vector_search_index_definition = {
    "fields": [
        {
            "type": "vector",
            "path": "embedding",
            "similarity": "cosine",
            "numDimensions": 1536
        },
        {
            "type": "filter",
            "path": "metadata.*"
        }
    ]
}

So I can later query with a filter on a field within ‘metadata’?

embedding = embed.embed_query("example")
pipeline = [
    {
        '$vectorSearch': {
            'index': 'products_vector_search_index',
            'path': "embedding",
            'queryVector': embedding,
            'numCandidates': 25,
            'limit': 10,
            'filter': {
                "metadata.foo": "bar"
            },
        }
    }
]
db.collection.aggregate(pipeline).to_list()
1 Like