亲爱的大同同胞们,
我正在使用CosmosTrigger创建Azure函数(Python)。
为了实现 "如果不存在就插入 "的功能,我将target_collection配置为唯一的键 "name"。
例如
{"name": "John", "id": "1"}
=> OK[{"name": "John", "id": "2"}, {"name": "Mary", "id": "3"}]
=> System.Private.CoreLib: 执行函数时出现异常。Functions.CosmosTrigger.DocumentDB.Core: Exception while executing function: Functions.CosmosTrigger. Microsoft.Azure.DocumentDB.Core。系统中已经存在具有指定id的实体。独有键 "name"。"John "已经存在于target_collection中。所以 outdocs:func.Out[func.Document], outdocs.set()返回冲突 409,"Mary "永远不会被写入 target_collection。
重要的是:当我从数据资源管理器上传包含数组项目的json到target_collection时,所有冲突都会返回错误,但所有项目都得到处理.当我尝试从Azure函数中写入它时,第一个冲突会引发错误,其余项目从未将其写入target_collection。
我的问题是
def main(docs: func.DocumentList, outdocs: func.Out[func.Document]) -> str:
compl_docs = func.DocumentList()
compl_docs_dict = {
"name": "John",
"id": "2"
}
compl_docs.append(func.Document.from_dict(compl_docs_dict))
compl_docs_dict = {
"name": "Mary",
"id": "3"
}
compl_docs.append(func.Document.from_dict(compl_docs_dict))
outdocs.set(compl_docs)
解决方案这就是如何在 cosmos 中插入-if-not-exist 函数。