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.
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.
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.
Publicación traducida automáticamente
Artículo escrito por localhost3000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA