猫鼬模式虚拟属性始终返回未定义

分心

我试图使用猫鼬模式虚拟函数来实现标志,但是我无法使其工作。猫鼬数据库托管在上mongodb altas我尝试删除整个集合并再次凝视。

这是一个简化的示例:

假设我有一个基本的用户架构:

const mongoose = require('mongoose')
const UserSchema = new mongoose.Schema({
  name: String,
  email: String
}, {toObject: {virtuals: true, getters: true}})

UserSchema.virtual('status').get(() => {
   return this.name
})

const User = mongoose.model('User', UserSchema)

module.exports = {
    User,
    UserSchema
}

app.js我有以下内容:

const mongoose = require("mongoose");
const express = require("express");
const {User} = require("./models/User")
const app = express();

app.use(express.urlencoded({extended: true}));
app.use(express.json());

mongoose.connect(process.env.DB_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

User.findById("600ae8001931ad49eae40c03", (err, doc) => {
    console.log(doc.status)
})

const port = process.env.PORT || 5000;

app.listen(port, () => {
    console.log(`server at http://localhost:${port}`);
});

我确定ID存在,但结果始终为undefined我在这里做错了什么?

穆罕默德·亚瑟·艾哈迈迪

基于猫鼬的文档

不要使用ES6箭头函数(=>)声明方法。箭头函数明确阻止了此绑定,因此您的方法将无权访问该文档,并且以上示例将不起作用

因此您不能在中使用箭头功能get,请执行以下操作:

UserSchema.virtual('status').get(function() {
  return this.name
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章