Método Mongoose Populate()

En MongoDB, la población es el proceso de reemplazar la ruta especificada en el documento de una colección con el documento real de la otra colección.

Necesidad de Población: Cada vez que en el esquema de una colección proporcionamos una referencia (en cualquier campo) a un documento de cualquier otra colección, necesitamos un método populate() para llenar el campo con ese documento.

Ejemplo: en el siguiente ejemplo, tenemos un userSchema y otro postSchema , en el postSchema tenemos un campo postedBy que hace referencia a un documento del modelo User .

const userSchema = new mongoose.Schema({
    username: String,
    email: String
})

const postSchema = new mongoose.Schema({
    title: String,
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    }
})

const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);

module.exports = {
    Source, Destination, User, Post
}

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');

Base de datos: Inicialmente tenemos dos colecciones de usuarios y publicaciones en nuestra base de datos GFG . Y cada colección contiene un solo documento.

Inicialmente colección de usuarios y publicaciones en la base de datos.

Ejemplo 1: Realizaremos la consulta para encontrar todas las publicaciones sin utilizar el método populate() .

Cree una carpeta y agregue el archivo main.js que se muestra a continuación:

main.js

// Requiring module
const mongoose = require('mongoose');
  
// Connecting to database
mongoose.connect('mongodb://localhost:27017/GFG',
    {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useFindAndModify: false
    });
  
// Creating Schemas
const userSchema = new mongoose.Schema({
    username: String,
    email: String
})
  
const postSchema = new mongoose.Schema({
    title: String,
    postedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    }
})
  
// Creating models from userSchema and postSchema
const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);
  
// Query to find and show all the posts
Post.find()
    .then(p => console.log(p))
    .catch(error => console.log(error));

Ejecute main.js usando el siguiente comando: 

node main.js

Salida: en la salida, podemos ver que solo obtenemos ObjectId (campo _id del documento de usuario) en el campo postedBy , y no todo el documento.

Salida en la consola después de ejecutar main.js

Ejemplo 2: Realizaremos la consulta para encontrar todas las publicaciones utilizando el método populate() .

Para superar el problema anterior, se usa el método populate() para reemplazar el campo ObjectId del usuario con el documento completo que consta de todos los datos del usuario. Para esto solo tenemos que reemplazar la parte de consulta en el código anterior en el archivo main.js con:

Post.find()
.populate("postedBy")
.then(p=>console.log(p))
.catch(error=>console.log(error));

Nota: En el argumento del método populate() pasamos el campo que queremos llenar con los datos del usuario.

Salida: después de usar el método de llenado, podemos ver que en la salida podemos obtener todos los datos del usuario dentro del campo de publicaciones publicado por.

Salida después de usar el método de relleno en el código

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 *