我试图使用猫鼬模式虚拟函数来实现标志,但是我无法使其工作。猫鼬数据库托管在上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] 删除。
我来说两句