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.

¿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..."}) – devuelve null
  • 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').ObjectIdfindOne() devuelve null nuevamente.

¿Puedes recomendar alguna otra forma de realizar esta búsqueda?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Se recomienda utilizar el paquete BSON en lugar del paquete mongodb para utilizar ObjectId en las Funciones de Realm. Aquí tienes un fragmento de código actualizado que debería funcionar:

    const { BSON } = require('bson');
    exports = async () => {
      const cluster = context.services.get('mongodb-atlas');
      const collection = cluster.db('my-db').collection('my-coll');
      const docId = BSON.ObjectId('61d33d2059c38ef0584c94f8'); // Convierte una cadena en ObjectId
      return await collection.findOne({_id: docId});
    }
    

    Al utilizar BSON.ObjectId del paquete bson, 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.

Comments are closed.