我在 cosmosDB 中创建了一个具有唯一键的集合。理想情况下,如果输入现有键作为集合的输入,则应使用新值更新集合。我有一个 Azure cosmosDB 触发函数,将上述集合配置为输出。
下面是我有逻辑实现的 index.js 文件。
module.exports = async function (context, documents) {
var StatusInput = context.bindings.StatusInput; //additional input
if (!!documents && documents.length > 0) {
var finalOutput = [];
// logic implementation
for(var i = 0; i < documents.length; i++){
var document = documents[i];
var baseID = document.id;
baseTempJson = {};
var abcValue = null;
var xyzValue = null;
const checkForID = obj => obj.id === baseID;
if(!(StatusInput.some(checkForID))){
if(!!document.abc && document.abc !=null) {
abcValue = document.abc;
} if(!!document.xyz && document.xyz != null) {
xyzValue = document.xyz;
}
baseTempJson = {"id": baseID, "abc": abcValue, "xyz": xyzValue};
finalOutput.push(baseTempJson);
} else
{
StatusInput.forEach(function(element){
var innerID = element.id;
var tempJson = {};
var abcValue = null;
var xyzValue = null;
if(innerID == baseID){
context.log('Data for the ID ' + innerID + ' is existing. Updating the values.');
if(!!document.abc && document.abc !=null) {
abcValue = document.abc;
} if(!!element.abc && typeof document.abc == "undefined") {
abcValue = element.abc;
}
if(!!document.xyz && document.xyz != null) {
xyzValue = document.xyz;
}if(!!element.xyz && typeof document.xyz == "undefined") {
xyzValue = element.xyz;
}
tempJson = {"id": baseID, "abc": abcValue, "xyz": xyzValue};
finalOutput.push(tempJson);
}
});
}
}
context.bindings.StatusOutput = finalOutput;
}
context.done();
}
每当我运行触发函数时,它都会抛出以下错误,因为唯一键的数据已经存在于集合中。
Entity with the specified id already exists in the system
如果唯一键已经存在于集合中,是否有任何方法可以解决此问题并更新 cosmosDB 集合。
我仅从 Azure 门户创建 DB 和 Trigger 函数。我在这里搜索了一个解决方案,但我在任何地方都没有看到通过 azure 门户创建触发功能的解决方案。