Я создал коллекцию в 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, если уникальный ключ уже существует в коллекции.
Я создаю функции DB и Trigger только на портале Azure. Я искал решение здесь, но нигде не видел решения, для которого функция запуска создана через портал Azure.