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!
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:
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:
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.