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.

Consulta de búsqueda a través de todas las colecciones en MongoDB.

Estoy usando las funciones de mongodb Realm y quiero ejecutar esta consulta en todas las colecciones de mi base de datos. Tengo que escribir el nombre de la colección; de lo contrario, obtengo este error:

‘ (AtlasError) Pipeline can only have no collection if the first stage is $changeStream’, error_code: ‘MongoDBError’ ‘

Aquí está mi código:

exports = function (payload) {
const movies = context.services
.get(‘mongodb-atlas’)
.db(‘subsDB’)
.collection(‘subtitles’);

let arg = payload.query.arg;
let found = movies.aggregate([
{
$search: {
index: ‘default’,
text: {
query: arg,
path: {
wildcard: ‘*’,
},
},
},
},

]);
}

¿Cómo puedo ejecutar esta consulta en todas las colecciones de mi base de datos?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para ejecutar esta consulta en todas las colecciones de su base de datos de MongoDB Realm, puede modificar el código para recorrer todas las colecciones en la base de datos y aplicar la misma consulta usando el método db.getCollectionNames(). Aquí está un ejemplo de código modificado:

    exports = function (payload) {
      const db = context.services.get('mongodb-atlas').db('subsDB');
      const collections = db.getCollectionNames();
      let arg = payload.query.arg;
    
      collections.forEach(function(collectionName){
        const collection = db.collection(collectionName);
    
        try {
          let found = collection.aggregate([
            {
              $search: {
                index: 'default',
                text: {
                  query: arg,
                  path: {
                    wildcard: '*',
                  },
                },
              },
            }
          ]);
        } catch (e) {
          console.error(`Error al procesar la colección ${collectionName}: ${e}`);
        }
      });
    }
    

    Este código primero obtiene una lista de todos los nombres de colección utilizando el método db.getCollectionNames (), y luego recorre cada colección para aplicar la misma consulta de búsqueda. Se agrega el bloque try-catch para manejar cualquier error que pueda ocurrir durante el procesamiento de cada colección.

Comments are closed.