Mongoose Virtuals 入门介绍和使用

发布于 2022-07-29 00:08:18 字数 1986 浏览 242 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

人事已非

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

尘世孤行

文章 0 评论 0

烟─花易冷

文章 0 评论 0

倒带

文章 0 评论 0

忱杏

文章 0 评论 0

送君千里

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文