Hi,
I am using java script to construct a propr statement in order to update json stored in MongoDB (Azure CosmosDB).
That is an example of the json document that is stored in the mongo DB:
{
"_id": {
"$oid": "XXXXXXXX"
},
"relatedOe": {
"nameOE1": {
"name": "company1",
"sevDeskContactId": "XXXXX",
"userCount": 23,
"lastUpdate": "2023-10-31 07:20:13",
"webinarFlatrate": false,
"createInvoice": true,
"dateOfActivePayment": "2023-05-30 00:00:00"
},
"nameOE2": {
"name": "company2",
"sevDeskContactId": "XXXXXXX",
"userCount": 54,
"lastUpdate": "2023-10-31 07:20:12",
"webinarFlatrate": false,
"createInvoice": true,
"dateOfActivePayment": "2023-05-30 00:00:00"
},
"nameOE3": {
"name": "company3",
"sevDeskContactId": "XXXXXX",
"userCount": 23,
"lastUpdate": "2023-10-31 07:20:12",
"webinarFlatrate": false,
"createInvoice": true,
"dateOfActivePayment": "2023-10-01 00:00:00",
"useSEPA": true,
"sendInvoice": true,
"setupIntent": "123123123123123123123123"
}
},
"name": "Big Holding",
"aggregatedInvoice": false,
"dateOfActivePayment": "2023-05-30 00:00:00",
"createInvoice": true,
"priceModel": "iouaosjdlksjdlkjajsd",
"priceKey": "12314324234",
"webinarPriceKey": "123123123",
"aggregatedUserCount": 100,
"id": 79,
"dateCreated": "2023-07-16 18:23:18"
}
I have already a working mechanism to update the attributes on the highest hierachy, see here: Whats the best way to save changes (from a table) to a mongoDB?.
But now I am trying to build a query in order to update the relatedOe object/s. The changes to that objects are found in the table2.changearraySet.
So the best way that I could find (using Chat GPT) is in order to update the tealtedOe objects is following:
- JavaScript to iterade over changes in "table2.changesetArray" and calls a MongoDB query to update the documents
- Resource query MongoDB to update every single object
Here is the code...
JavaScript snippet:
let changesetArray = table2.changesetArray;
console.log(changesetArray)
changesetArray.forEach(change => {
let updateFields = {};
let oeName = change.name; // Assuming 'name' is the key of the relatedOe object
console.log(change)
delete change.name; // Remove the name key as it's not part of the update fields
console.log(change)
for (let key in change) {
if (change.hasOwnProperty(key)) {
// Construct the update path for the nested fields
let fieldPath = `relatedOe.${oeName}.${key}`;
updateFields[fieldPath] = change[key];
console.log(fieldPath)
}
}
console.log(updateFields)
console.log(typeof updateFields)
// Convert updateFields to a JSON string and then parse it back to an object
let updateFieldsJson = JSON.stringify(updateFields);
console.log("Parsed Stuff")
console.log(updateFieldsJson)
let parsedUpdateFields = JSON.parse(updateFieldsJson);
console.log(parsedUpdateFields)
// Trigger the MongoDB update query
updateRelatedOE.trigger({
additionalScope: {
// The main document's _id
idToUpdate: selectedCompany_ID,
updateFields: parsedUpdateFields
//idToUpdate: "64b7912d8b44dc7f06728ddb",
//updateFields: {"relatedOe.lebensmut.webinarFlatrate": false}
}
});
});
Mongo DB Query:
I am getting following error from the MongoDB query:
updateRelatedOE failed (0.001s):Failed to execute 'postMessage' on 'Window': function(...t){let n;try{n=e(...t)}catch(e){return}return n instanceof Promise?new Promise((e=>{n.then(e).catch((()=>e()))})):n} could not be cloned.
I tried to replicate the update call with static values and it is working if I am handing over:
updateRelatedOE.trigger({
additionalScope: {
idToUpdate: "64b7912d8b44dc7f06728ddb",
updateFields: {"relatedOe.lebensmut.webinarFlatrate": false}
}
});
I have no idea why this is not working....I need help here.