Eliminar documento de MongoDB mediante su ID de cadena
Tengo un documento de MongoDB que se ve así:
{
_id: 'EXISTING_ID'
}
Quiero eliminar este documento e intenté usar este código para hacerlo (aprovechando el controlador nativo de Node.js para MongoDB):
import { MongoClient, ObjectId } from "mongodb";
export const deleteDocumentWithId = (id: string) => {
return MongoClient.connect(dbUrl, (err, db) => {
if (err) {
throw err;
}
const dbo = db.db("my-db");
dbo.collection("my-collection").deleteOne({ _id: id }, (err, obj) => {
if (err) {
throw err;
}
db.close();
});
});
};
deleteDocumentWithId("EXISTING_ID");
Sin embargo, el compilador de TypeScript muestra un error, diciendo que no hay sobrecargas que coincidan con esta llamada; _id
debería ser de tipo ObjectId
. Sin embargo, si reemplazo la llamada con:
dbo.collection("my-collection").deleteOne({ _id: new ObjectId(id) }...
Obtengo un error en tiempo de ejecución, que dice:
BSONTypeError: El argumento pasado debe ser una única cadena de 12 bytes o una cadena de 24 caracteres hexadecimales.
porque la cadena “EXISTING_ID” tiene solo 11 bytes de tamaño.
Sin embargo, ni siquiera creo que ObjectId
sea el tipo correcto para usar aquí, ya que no veo ObjectId
en la base de datos. El _id
para el documento anterior es un string.
En Java, existen los métodos findById
o deleteById
, pero no veo estos en Node.js. ¿Hay alguna forma de lograr lo que quiero y que aún no he encontrado?
davy.ai
Parece que el error se produce porque el ID existente no está en el formato correcto para un “ObjectId”.
Si el
_id
del documento es una cadena de texto y no unObjectId
, entonces deberías poder eliminar el documento utilizando el siguiente código:Esto debería funcionar siempre y cuando el
_id
sea un identificador único en la colección.Si deseas utilizar un
ObjectId
, puedes convertir la cadena de texto al formato correcto utilizando el métodoObjectId.isValid()
para verificar si la cadena está en el formato correcto, y luego utilizandonew ObjectId(id)
para crear un nuevoObjectId
a partir de la cadena:Este código verificará si la cadena es un ObjectId válido, y si lo es, creará un nuevo
ObjectId
y lo utilizará para eliminar el documento con el_id
correspondiente.