Mongoose Virtuals 入门介绍和使用
Mongoose virtuals 上的计算属性 Mongoose 文档 。 它们不存储在 MongoDB 中:每当您访问它时都会计算一个虚拟属性。
假设你有一个 BlogPost
存储 降价 博客文章 你可以创建一个虚拟 html
每当 您 访问 html
财产。
// Markdown parser
const marked = require('marked');
const blogPostSchema = new Schema({ content: String });
// A _virtual_ is a schema property that is **not** stored in MongoDB.
// It is instead calculated from other properties in the document.
blogPostSchema.virtual('html').get(function() {
// In the getter function, `this` is the document. Don't use arrow
// functions for virtual getters!
return marked(this.content);
});
const BlogPost = mongoose.model('BlogPost', blogPostSchema);
const doc = new BlogPost({ content: '# Hello' });
doc.html; // "<h1>Hello</h1>"
为什么要使用 virtual 而不是 方法 ? 因为您可以将 Mongoose 配置为在 将 Mongoose 文档转换为 JSON ,包括使用 Express res.json()
功能 。
const app = require('express')();
const axios = require('axios');
// Make Mongoose attach virtuals whenever calling `JSON.stringify()`,
// including using `res.json()`
mongoose.set('toJSON', { virtuals: true });
app.get('*', function(req, res) {
// Mongoose will automatically attach the `html` virtual
res.json(doc);
});
const server = app.listen(3000);
// "<h1>Hello</h1>"
await axios.get('http://localhost:3000').then(res => res.data.html);
virtuals 的缺点是,由于它们不存储在 MongoDB 中,因此您不能在 查询 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论