Hello @Jack and welcome to Microsoft Q&A.
It sounds like you are having trouble with making your upsert operation into Cosmos behave like an upsert rather than an insert.
To update an object instead of creating a new one, you must specify the ObjectID. Otherwise the ObjectID is auto-generated and new item is inserted.
If your source JSON have a property you would like to use as an ID, leverage that in the mapping section of your copy activity like below picture.
In connector-azure-cosmos-db: Cosmos as Sink, this is called out:
Describes how to write data to Azure Cosmos DB. Allowed values: insert and upsert.
The behavior of upsert is to replace the document if a document with the same ID already exists; otherwise, insert the document.
Note: The service automatically generates an ID for a document if an ID isn't specified either in the original document or by column mapping. This means that you must ensure that, for upsert to work as expected, your document has an ID.