function spSyncBulkData(docs) { var collection = getContext().getCollection(); var collectionLink = collection.getSelfLink(); var count = 0; var doc = null; var removeFieldTtl = "ttl"; if (!docs) throw new Error("The array is undefined or null."); if (typeof docs === "string") docs = JSON.parse(docs); var docsLength = docs.length; if (docsLength === 0) { getContext().getResponse().setBody(0); return; } tryUpsert(docs[count], callback); function tryUpsert(document, callback) { var id = document["id"]; var query = { query: "select * from root r where r.id = @id", parameters: [{ name: "@id", value: id }] }; var requestOptions = {}; var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, documents, responseOptions) { if (err) throw err; if (documents.length > 0) { doc = document; tryUpdate(documents[0]); } else { isAccepted = collection.createDocument(collectionLink, document, callback); } }); if (!isAccepted) getContext().getResponse().setBody(count); } function tryUpdate(document) { var requestOptions = { etag: document._etag }; var fields, i; delete document[removeFieldTtl]; fields = Object.keys(doc); for (i = 0; i < fields.length; i++) { document[fields[i]] = doc[fields[i]]; } var isAccepted = collection.replaceDocument(document._self, document, requestOptions, callback); if (!isAccepted) throw new Error("The stored procedure timed out."); } function callback(err, doc, options) { if (err) throw err; count++; if (count >= docsLength) { getContext().getResponse().setBody(count); } else { tryUpsert(docs[count], callback); } } }