Привязка действительно выполняет операцию Upsert.
Я создал этот пример функции, которая принимает полезную нагрузку Http (JSON) и сохраняет ее в базе данных Cosmos как есть:
[FunctionName("Function1")]
public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
[DocumentDB("MyDb", "MyCollection", ConnectionStringSetting = "MyCosmosConnectionString")] out dynamic document,
TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
dynamic data = req.Content.ReadAsAsync<object>().GetAwaiter().GetResult();
document = data;
return req.CreateResponse(HttpStatusCode.OK);
}
Если я отправляю полезную нагрузку JSON конечной точке Http, выходная привязка работает, как и ожидалось:
При проверке Обозревателя данных я вижу:
Если я отправлю второй полезный груз, на этот раз добавим свойство (с тем же идентификатором):
Обозреватель данных показывает, что документ был обновлен, с тем же кодом функции:
Можете ли вы добавить полное исключение / ошибка трассировки ?Ваше сообщение служебной шины включает в себя «id»?Ваша коллекция разделена?
Если ваша коллекция секционирована и вы изменяете значение свойства ключа раздела, то привязка не обновит существующий документ, она создаст новый, потому что операция Upsert не найдет существующийдокумент (на основе идентификатора / ключа раздела).Но это не приведет к исключению.