miércoles, 9 de octubre de 2019

Bulk Delete Cosmosdb



Para borrar documentos de cosmosdb existen varias formas de hacerlo se puede hacer con el SDK, etc. buscando en los documentos de Microsoft y cosmosdb encontré una forma muy fácil y simple para poder borrar documentos.

Lo primero que tenemos que hacer es crear un StoreProcedure en la collection donde deseamos borrar los documentos.

Damos clic a la colección de datos y luego nos vamos al botón que dice New Store Procedure de esta manera podemos iniciar a agregar el código que se ocupa para borrar los documentos.


Le damos el nombre que deseamos al SP.

Ahora viene la interesante el SP de javascript que vamos a usar para hacer el borrado de documentos no lo escribí yo. Este lo encontré en este documento que además tiene ejemplos para otro tipo de procedimientos almacenados.


function bulkDelete(query) {
     var collection = getContext().getCollection();
     var collectionLink = collection.getSelfLink();
     var response = getContext().getResponse();
     var responseBody = {
         deleted: 0,
         continuation: true
     };
     if (!query) throw new Error("The query is undefined or null.");
     tryQueryAndDelete();
     function tryQueryAndDelete(continuation) {
         var requestOptions = {continuation: continuation};
         var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, retrievedDocs, responseOptions) {
             if (err) throw err;
             if (retrievedDocs.length > 0) {
                 tryDelete(retrievedDocs);
             } else if (responseOptions.continuation) {
                 tryQueryAndDelete(responseOptions.continuation);
             } else {
                 responseBody.continuation = false;
                 response.setBody(responseBody);
             }
         });
         if (!isAccepted) {
             response.setBody(responseBody);
         }
     }
     function tryDelete(documents) {
         if (documents.length > 0) {
             var isAccepted = collection.deleteDocument(documents[0]._self, {}, function (err, responseOptions) {
                 if (err) throw err;
                 responseBody.deleted++;
                 documents.shift();
                 tryDelete(documents);
             });
             if (!isAccepted) {
                 response.setBody(responseBody);
             }
         } else {
             tryQueryAndDelete();
         }
     }
 }

Yo lo probé y funciona muy bien. Lo interesante es que solamente le tenemos que pasar un script tipo SQL para borrar los documentos que necesitamos. Y bueno se pueden hacer todos los cambios que necesite para que se ajuste mejor a sus necesidades.

Etiquetas: , , , ,

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio