¿Cómo obtener datos de 2 colecciones diferentes de mongoDB usando Node.js?

Mongoose es una biblioteca de modelado de datos de objetos (ODM) para MongoDB. Define un esquema fuertemente tipado, con valores predeterminados y validaciones de esquema que luego se asignan a un documento MongoDB.

Para obtener datos de una colección con Mongoose en NodeJS, debe tener dos cosas necesarias:

  1. Esquema: Es una estructura de documento que contiene la propiedad con sus tipos (valor por defecto, validaciones, etc. cuando se requiera) como un par clave-valor.
  2. Modelo : es una clase creada con la ayuda de un esquema definido y un documento MongoDB es una instancia del modelo. Por lo tanto, actúa como una interfaz para la base de datos MongoDB para crear, leer, actualizar y eliminar un documento.

Después de tener un modelo, podemos usar el método find() en el modelo de una colección en particular para obtener documentos de la colección.

Sintaxis: 

<Model_Name>.find(<query>,<projection>)
  • <consulta> : Es opcional. Especifica un filtro de selección que se usa para filtrar documentos usando varios operadores de consulta de MongoDB. Si no se aprueba, se devuelven todos los documentos.
  • <proyección> : Es opcional. Contiene campos que queremos que se devuelvan a los documentos que coinciden con el filtro de consulta. Si no se pasa, se devuelven todos los campos.

Instalar mangosta:

Paso 1: puede visitar el enlace Instalar mongoose para instalar el módulo mongoose. Puede instalar este paquete usando este comando.

npm install mongoose

Paso 2: ahora puede importar el módulo mongoose en su archivo usando:

const mongoose = require('mongoose');

Implementación:

Paso 1: cree una carpeta y agregue los archivos model.js y main.js en ella.

  • model.js: contiene esquemas y modelos para todas las colecciones que desea usar, y luego estamos exportando todos los modelos creados para que puedan importarse al archivo en el que obtendremos datos de diferentes colecciones.
  • main.js: Es el archivo del servidor principal aquí obtendremos datos de dos colecciones diferentes.

Paso 2: escriba el siguiente código en el archivo model.js .

model.js

// Requiring module
const mongoose = require('mongoose');
    
// Course Modal Schema
const courseSchema = new mongoose.Schema({
    _id: Number,
    name: String,
    category: String
});
    
// Student Modal Schema
const studentSchema = new mongoose.Schema({
    name: String,
    enroll: Number,
    courseId: Number
});
     
// Creating model objects
const Course = mongoose.model('course', courseSchema);
const Student = mongoose.model('student', studentSchema);
    
// Exporting our model objects
module.exports = {
    Student, Course
}

Base de datos: Ya tenemos documentos en nuestras colecciones de Cursos y Estudiantes de los cuales vamos a obtener datos como se muestra a continuación:

Colecciones Cursos y Alumnos en Base de Datos GFG

Paso 3: La conexión a la base de datos se puede establecer fácilmente usando mongoose como:

mongoose.connect('mongodb://localhost:27017/GFG',
{  
  useNewUrlParser: true,  
  useUnifiedTopology: true,  
  useFindAndModify: false
});

Paso 4: Escriba el siguiente código en el archivo main.js.

main.js

// Requiring mongoose module
const mongoose = require('mongoose');
  
// Importing Models Student and Course from model.js
const { Student, Course } = require('./model');
  
// Connecting to database
mongoose.connect('mongodb://localhost:27017/GFG',
    {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useFindAndModify: false
    });
  
var dbcourse = [];
  
// Finding courses of category Database
Course.find({ category: "Database" })
    .then(data => {
        console.log("Database Courses:")
        console.log(data);
  
        // Putting all course id's in dbcourse arrray
        data.map((d, k) => {
            dbcourse.push(d._id);
        })
  
        // Getting students who are enrolled in any
        // database course by filtering students
        // whose courseId matches with any id in
        // dbcourse array
        Student.find({ courseId: { $in: dbcourse } })
            .then(data => {
                console.log("Students in Database Courses:")
                console.log(data);
            })
            .catch(error => {
                console.log(error);
            })
    })
    .catch(error => {
        console.log(error);
    })

Paso 5: Ejecute el archivo main.js usando el siguiente comando:

node main.js

Explicación: en el código anterior, en el archivo main.js , obtenemos todos los documentos de la colección del curso cuya categoría es Base de datos, luego almacenamos _id de cada curso en la array dbcourse y luego obtenemos todos los documentos de la colección del estudiante que está inscrito en cualquier curso . de la categoría Base de datos.

Salida: Estamos obteniendo datos de dos colecciones diferentes, Cursos y Estudiantes en la consola que se muestra a continuación:

Salida después de ejecutar main.js

Publicación traducida automáticamente

Artículo escrito por localhost3000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *