Mongoose虚拟属性

Mongoose虚拟属性

虚拟属性 是不会持久化或存储在MongoDB数据库中的文档属性,它们仅在逻辑上存在,不会写入文档的集合中。

通过虚拟属性的 get 方法,我们可以根据已有文档字段的值设置虚拟属性的值,并返回虚拟属性的值。每次访问虚拟属性时,Mongoose都会调用get方法。

安装模块:

步骤1: 您可以访问链接 Install mongoose 获取有关安装 mongoose 模块的信息。您可以使用以下命令安装此软件包:

npm install mongoose

步骤2: 安装 mongoose 模块后,您可以使用以下代码将其导入到您的文件中:

const mongoose = require('mongoose');

数据库: 最初,在数据库 GFG 中,我们有一个空的用户集合。

Mongoose虚拟属性

实现Get方法

文件名: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); 
    })

运行以下命令来执行 app.js 文件:

node app.js

输出:

Mongoose虚拟属性

数据库: 程序执行后,我们的数据库将如下所示。

Mongoose虚拟属性

解释: 这里的模式(schema)包含了字段name.first和name.last,并且有一个虚拟属性name.full。当访问name.full时,将调用get方法,我们获取的全名将是将姓和名拼接在一起的结果。因此,当我们需要获取全名时,不需要分别访问名和姓,并将它们拼接在一起,而是可以通过虚拟属性轻松获取它们。

使用虚拟属性的set方法,我们可以从虚拟属性的值设置现有文档字段的值。

实现Set方法

文件名: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); 
    })

运行 index.js 文件,使用以下命令:

node index.js

输出:

Mongoose虚拟属性

数据库: 程序执行后,我们的数据库将会像这样。

Mongoose虚拟属性

解释: 在这里,当用户使用虚拟属性 name.full 保存文档时,set函数会自动使用 name.full 设置 name.first 和 name.last 字段的值。因此,借助虚拟属性,我们不需要为创建文档提供每个字段。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程