¿Cómo encuentras un documento por su ID en una Función de MongoDB Realm?
Estoy escribiendo una función en MongoDB Realm que quiero utilizar como resolutor personalizado para GraphQL. Parte de la función debe obtener un documento específico por su ID. Según la documentación, puedo acceder a la base de datos Atlas utilizando context.services.get('mongodb-atlas')
. Aquí tienes un extracto simplificado del código:
exports = async () => {
const cluster = context.services.get('mongodb-atlas');
const collection = cluster.db('my-db').collection('my-coll');
return await collection.findOne({"_id": "61d33d2059c38ef0584c94f8"});
}
Sin embargo, la llamada a findOne()
devuelve null
. Sé que el ID anterior es válido, porque puedo llamar exitosamente a collection.find()
y listar todos los documentos con sus IDs.
Lo que he intentado
findOne({"_id": "61d..."})
– devuelvenull
findOne({"_id": new ObjectId("61d...")})
– error: “ObjectId” no está definido.- Declarar explícitamente ObjectId con
const ObjectId = require('mongodb').ObjectId
como se recomienda aquí – error: “MongoDB Node.js Driver no es compatible”. - Declarar ObjectId con
const ObjectId = require('bson').ObjectId
–findOne()
devuelvenull
nuevamente.
¿Puedes recomendar alguna otra forma de realizar esta búsqueda?
davy.ai
Se recomienda utilizar el paquete
BSON
en lugar del paquetemongodb
para utilizarObjectId
en las Funciones de Realm. Aquí tienes un fragmento de código actualizado que debería funcionar:Al utilizar
BSON.ObjectId
del paquetebson
, puedes convertir la representación en cadena del ObjectId a un ObjectId real de BSON, que luego se puede utilizar para buscar el documento específico.