es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eliminar elemento de CosmosDB

Estoy tratando de borrar entradas de Azure CosmosDB.

La documentación dice:

/**
 * Delete item
 * Pass the id and partition key value to delete the item
 */
const { resource: result } = await container.item(id, category).delete();
console.log(`Deleted item with id: ${id}`);

Mi función para eliminar elementos es:

// takes in an entry id to detete and deletes it with the documentation
async function findItemsToDelete(idToDelete){

    const category = config.partitionKey; // partitionKey is {kind: "Hash", paths: ["/requests"]} and I've also tried just "/requests"

    // the four lines below are correct
    const { endpoint, key, databaseId, containerId } = config;
    const client = new CosmosClient({ endpoint, key });
    const database = client.database(databaseId);
    const container = database.container(containerId);

     // query to return item with id (random code to make sure the item exists)- not important
     const querySpec = {
         query: `SELECT * FROM c WHERE c.id = "${idToDelete}"`
     };
     const { resources: items } = await container.items
         .query(querySpec)
         .fetchAll();

// below is the delete code from the documentation
    const { resource: result } = await container.item(idToDelete, category).delete();

    // random array holding the item that was just deleted- not important
    return items;
  }

Cuando intento llamar a esto, obtengo un error que dice: Entity with the specified id does not exist in the system. ¿Alguien sabe cómo implementar esto correctamente? Sé que el ID es correcto, pero creo que puede estar haciendo algo mal con la parte de la partitionKey/Categoría.

Vi en esta publicación: https://stackoverflow.com/questions/61729907/cannot-delete-item-from-cosmosdb que puede necesitar el valor de la clave de partición, pero no sé qué es o cómo obtenerlo. ¡Avísenme si saben qué está sucediendo!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para implementar correctamente la eliminación de entradas desde Azure CosmosDB, es necesario proporcionar el id y el valor de la clave de partición del elemento que se desea eliminar. En su código, está obteniendo correctamente el contenedor y utilizando el código de eliminación del documento. Sin embargo, mencionó que podría estar haciendo algo mal con la parte de la clave de partición/categoría.

    La clave de partición es un valor que determina en qué partición se almacenan los datos en Azure CosmosDB. Al crear un contenedor, especifica una clave de partición. En su código, está recuperando la clave de partición del objeto de configuración. Mencionó que su clave de partición es {kind: “Hash”, paths: [“/requests”]}. Esto significa que la clave de partición se basa en el valor de la propiedad “/requests” en sus elementos.

    Para obtener el valor correcto de la clave de partición para el elemento que desea eliminar, primero debe buscar el elemento utilizando el mismo valor de clave de partición. En su código, está buscando el elemento con el id especificado utilizando el objeto querySpec. Sin embargo, no está especificando el valor de la clave de partición en la consulta.

    Para solucionar esto, puede agregar el valor de la clave de partición a su querySpec de esta manera:

    const querySpec = {
        query: `SELECT * FROM c WHERE c.id = "${idToDelete}" and c.requests = "${category}"`
    };
    

    Esto devolverá el elemento con el id y el valor de la clave de partición especificados. Luego, puede usar el código de eliminación del documento para eliminar el elemento:

    const { resource: result } = await container.item(idToDelete, category).delete();
    

    Asegúrese de proporcionar el valor correcto de la clave de partición para el elemento que desea eliminar. Si aún obtiene un error que dice “La entidad con el id especificado no existe en el sistema”, verifique que el id y el valor de la clave de partición sean correctos.

Comments are closed.