【发布时间】:2021-12-30 22:07:53
【问题描述】:
当 POST(来自 Postman)时,我最终得到具有相同“_id”的重复文档。查看示例 here 和 here,我想知道我的问题是否是我的 Cosmos DB 实例中没有正确设置某些内容? 示例:
如果我将形状的颜色更新为橙色,我会得到另一个 键为 1 的文档,但我期望看到一个 键为 1 且形状为橙色的文档。
功能:
public static void Run(
ILogger logger,
[EventGridTrigger] EventGridEvent e,
[CosmosDB(
databaseName: "myDatabase",
collectionName: "myCollection",
ConnectionStringSetting = "COSMOS_CONNECTION_STRING")] out MyObject myObjectDocument
)
{
logger.LogInformation("Event received {type} {subject}", e.EventType, e.Subject);
myObjectDocument = JsonConvert.DeserializeObject<MyObject>(e.Data.ToString());
logger.LogInformation(myObjectDocument.some.thing);
}
有效载荷:
[
{
"topic": "Topic",
"id": "1",
"eventType": "EventType",
"subject": "Subject",
"eventTime": "2012-08-10T21:04:07+00:00",
"data" : {
"id" : 1,
"effectiveDate" : "2020-10-18 15:00:00",
"shape" : {
"_id" : "1000",
"color" : "green",
"name" : "square"
}
},
"dataVersion": "2.0",
"metadataVersion": "1"
}
]
编辑:
分区键是“id”
Matias Quaranta 的回答和 cmets 成功了。另请注意,分区键必须是 string 而不是 int
【问题讨论】:
-
请编辑以提供更多详细信息。例如:您的 Azure 函数实际上并没有做任何事情 - 不太清楚为什么包含它。而且您还没有包含有关 upsert 操作的任何详细信息。另外,您收藏的分区键是什么?
-
_id是 Mongo 的文档标识符。 Cosmos DB 的 SQL API 使用id。你得到“重复”,因为你依赖_id匹配,这永远不会发生。
标签: c# azure-functions azure-cosmosdb