Los virtuales son propiedades de documentos que no persisten ni se almacenan en la base de datos MongoDB, solo existen lógicamente y no se escriben en la colección del documento.
Con el método get de la propiedad virtual, podemos establecer el valor de la propiedad virtual a partir de los valores de campo del documento existente y devuelve el valor de la propiedad virtual. Mongoose llama al método get cada vez que accedemos a la propiedad virtual.
Módulo de instalación:
Paso 1: puede visitar el enlace Instalar mongoose para obtener información sobre cómo instalar el módulo mongoose . Puede instalar este paquete usando este comando:
npm install mongoose
Paso 2: después de instalar el módulo mongoose, puede importarlo a su archivo usando el siguiente código:
const mongoose = require('mongoose');
Base de datos: Inicialmente, tenemos una colección de usuarios vacía en la base de datos GFG .
Implementación del método Get:
Nombre de archivo: app.js
Javascript
// Requiring module const mongoose = require('mongoose'); const express = require('express'); const app = express(); // Connecting to database mongoose.connect('mongodb://localhost:27017/GFG', { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false }); // Constructing mongoose schema const userSchema = new mongoose.Schema({ name: { first: String, last: String } }); // Setting virtual property using get method userSchema.virtual('name.full') .get(function () { return this.name.first + ' ' + this.name.last; }) // Creating mongoose model const User = mongoose.model('user', userSchema); const newUser = new User({ name: { first: "David", last: "Beckham" } }) newUser.save() .then(u => { console.log("USERNAME: ", u.name.full) }) .catch(error => { console.log(error); })
Ejecute el archivo app.js con el siguiente comando:
node app.js
Producción:
Base de datos: Después de la ejecución del programa, nuestra base de datos se verá así.
Explicación: Aquí, el esquema contiene los campos nombre.primero y nombre.apellido y tiene una propiedad virtual nombre.completo . Cada vez que se accede a name.full , se llama al método get y obtenemos el nombre completo como una concatenación de nombre y apellido. Por lo tanto, siempre que tengamos que obtener el nombre completo, no tenemos que acceder al nombre y apellido por separado y concatenarlos, sino que podemos obtenerlos fácilmente a través de la propiedad virtual.
Con el método set de propiedad virtual, podemos establecer el valor de los campos de documentos existentes a partir del valor de la propiedad virtual.
Implementación del Método Set:
Nombre de archivo: index.js
Javascript
// Requiring module const mongoose = require('mongoose'); const express = require('express'); const app = express(); // Connecting to database mongoose.connect('mongodb://localhost:27017/GFG', { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: false }); // Constructing mongoose schema const userSchema = new mongoose.Schema({ name: { first: String, last: String } }); // Setting the firstname and lastname using set method userSchema.virtual('name.full') .get(function () { return this.name.first + ' ' + this.name.last; }) .set(function (value) { var fname = value.split(' '); this.name.first = fname[0]; this.name.last = fname[1]; }) // Creating mongoose model const User = mongoose.model('user', userSchema); const newUser = new User({ name: { full: "Dave Bautista" } }) newUser.save() .then(u => { console.log("FIRSTNAME: ", u.name.first, "\nLASTNAME:", u.name.last) }) .catch(error => { console.log(error); })
Ejecute el archivo index.js con el siguiente comando:
node index.js
Producción:
Base de datos: Después de la ejecución del programa, nuestra base de datos se verá así.
Explicación: Aquí, cuando el usuario guarda el documento usando la propiedad virtual name.full , la función set establece automáticamente los valores de los campos name.first y name.last usando name.full . Por lo tanto, con la ayuda de la propiedad virtual, no necesitábamos proporcionar cada campo por separado para crear un documento.
Publicación traducida automáticamente
Artículo escrito por localhost3000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA