• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

231
Views
¿Qué es un virtual para una URL en Mongoose?

Actualmente estoy siguiendo un tutorial sobre la implementación de una base de datos (Mongoose) en un sitio web simple creado con Express-framework. No tengo ningún problema para entender el concepto de modelos, pero no le doy sentido a las líneas que siguen al comentario " URL virtual para libro " en el código adjunto. ¿Cómo operan estas líneas y qué papel tiene en este contexto tener una propiedad virtual?

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var BookSchema = new Schema( { title: {type: String, required: true}, author: {type: Schema.Types.ObjectId, ref: 'Author', required: true}, summary: {type: String, required: true}, isbn: {type: String, required: true}, genre: [{type: Schema.Types.ObjectId, ref: 'Genre'}] } ); // Virtual for book's URL BookSchema .virtual('url') .get(function () { return '/catalog/book/' + this._id; }); //Export model module.exports = mongoose.model('Book', BookSchema);
about 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Los virtuales se utilizan normalmente para las propiedades calculadas en los documentos.

 BookSchema // 'url' is the name of the virtual .virtual('url') .get(function () { // you are computing dynamic url return '/catalog/book/' + this._id; });

Lo importante de los virtuales es que no almacena nada en la base de datos. Imagine que almacenó "nombre" y "apellido", pero desea mostrar el nombre completo sin tener la columna "nombre completo". Estaría utilizando datos repetidos en la base de datos si agrega la propiedad de fullname a su esquema, esto se ralentizará y también le costará. En su lugar, escribe virtual:

 YourSchema.get(function(){ return this.firstname + ' ' + this.lastname })

También puede ir un paso más allá y devolver la propiedad de nombre fullname tal como está en una columna en la base de datos. Mongoose Schema toma objeto de opciones

 let options={ toJSON:{ virtuals: true } }

establecer el virtual

 let YourSchemaVirtual=YourSchema.virtual('fullname')

ahora al consultar la base de datos, obtenga la colección

 YourModel.findOne({firstname:"name"}).exec(function(err,user){ res.send(user) })

En el valor de retorno, verá el campo de nombre completo calculado como fullname this.firstname + ' ' + this.lastname fullname no tenga un nombre completo almacenado en la base de datos.

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error