Question about schema evolution: extending existing nested object properties

Description

Hi everyone,

I currently have a collection with a nested object property (object or object[]) that already contains data.

For example:

Property(
    name="merged_summary",
    data_type=DataType.OBJECT_ARRAY,
    nested_properties=[
        Property(
            name="summary",
            data_type=DataType.TEXT,
        ),
        Property(
            name="turn",
            data_type=DataType.INT,
        ),
    ],
)

If I want to add new fields to this existing nested object, for example:

Property(
    name="type",
    data_type=DataType.TEXT,
)

is it possible to do this without recreating the collection or migrating existing data?

In other words:

Does Weaviate support extending an existing object / object[] schema by adding new nested properties when data already exists?

Server Setup Information

  • Weaviate Server Version: 1.33.10
  • Deployment Method: docker
  • Client Language and Version: python & 4.18.3
  • Multitenancy: Yes

hi @Astlvk !!

Welcome to our community :hugs:

If you have AUTOSCHEMA_ENABLED set to true (that’s the default), you can just push data in. For example:

client.collections.delete("MyObjectCollection")
collection = client.collections.create(
    "MyObjectCollection"
)
# push data:
collection.data.insert({"object1": {"this": "is a test object"}})

# get the property schema
collection.config.get().properties[0].to_dict()

# prints:
{'name': 'object1',
 'description': "This property was generated by Weaviate's auto-schema feature on Wed Dec 17 14:26:49 2025",
 'dataType': ['object'],
 'indexFilterable': True,
 'indexSearchable': False,
 'indexRangeFilters': False,
 'tokenization': None,
 'nestedProperties': [{'dataType': ['text'],
   'description': "This nested property was generated by Weaviate's auto-schema feature on Wed Dec 17 14:26:49 2025",
   'indexFilterable': True,
   'indexSearchable': True,
   'name': 'this',
   'tokenization': 'word'}]}

# now you push a different object:
collection.data.insert({"object1": {"this": "is a second test object", "that": ["hi", "there!"]}})

# get the property schema
collection.config.get().properties[0].to_dict()

# prints:
{'name': 'object1',
 'description': "This property was generated by Weaviate's auto-schema feature on Wed Dec 17 14:26:49 2025",
 'dataType': ['object'],
 'indexFilterable': True,
 'indexSearchable': False,
 'indexRangeFilters': False,
 'tokenization': None,
 'nestedProperties': [{'dataType': ['text'],
   'description': "This nested property was generated by Weaviate's auto-schema feature on Wed Dec 17 14:26:49 2025",
   'indexFilterable': True,
   'indexSearchable': True,
   'name': 'this',
   'tokenization': 'word'},
  {'dataType': ['text[]'],
   'description': "This nested property was generated by Weaviate's auto-schema feature on Wed Dec 17 14:27:42 2025",
   'indexFilterable': True,
   'indexSearchable': True,
   'name': 'that',
   'tokenization': 'word'}]}

However, if you have auto schema turned off, there doesn’t seems to have a away to achieve the same change :thinking:

I will investigate it more and get back here.

Thanks and happy coding! :slight_smile:

Thank you for the reply!

It’s a bit unfortunate in my situation — I have AUTOSCHEMA_ENABLED set to false (as recommended in the Weaviate documentation for production environments), so automatic nested property expansion isn’t available.

As the product evolves, schema changes — especially adding new fields — are often unavoidable. It would be great to see stronger support or recommended best practices for handling nested schema evolution when autoschema is disabled.

Thanks again for the help — much appreciated! :raising_hands: