问答

个人博客项目,koa2中使用mogoose查询指定id文章后,如何在查询

作者:admin 2021-09-23 我要评论

我想实现的是这种功能,这是一篇博客的文章详情页里面的前一条数据id和标题和后一条数据id和标题 // 查询文章详情async getArticle(ctx) { const { id } = ctx.p...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我想实现的是这种功能,这是一篇博客的文章详情页里面的前一条数据id和标题和后一条数据id和标题

image.png

// 查询文章详情
async getArticle(ctx) {
    const { id } = ctx.params;
    const article = await Article.findOne({ _id: id }).populate([
  { path: "category" },
  { path: "tags" },
  { path: "author" }
]);
article.views++;
article.save();

const prev_article = await Article.findOne({ _id: { "$lt": id } }).sort({ _id: -1 }).limit(1);

const next_article = await Article.findOne({ _id: { "$gt": id } }).sort({ _id: 1 }).limit(1);

article.prev = prev_article ? { _id: prev_article._id, title: prev_article.title } : { message: "已是第一条文章" };

article.next = next_article ? { _id: next_article._id, title: next_article.title } : { message: "已是最后一条文章" };

ctx.body = article
  ? new Response().json(article)
  : new Response().error("文章不存在~");
}

刚开始我是这样写的,后来查到好像mongoose查询后的数据不能增加属性,我不想重新再定义一个变量来增加,请问可以使用别的方法来实现吗? 我目前想到的是使用mongoose的虚拟属性是实现,但我发现好像碰到问题了

###

应该是可以增加的,你查询出来的是 mongoose 文档格式,需要转换为 json 格式,在查询语句后面加一条 .lean()

const article = await Article.findOne({ _id: id }).populate([
  { path: "category" },
  { path: "tags" },
  { path: "author" }
]).lean();

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 个人博客项目,koa2中使用mogoose查询

    个人博客项目,koa2中使用mogoose查询

  • vue+ts 如何菜单点击赋予菜单样式?

    vue+ts 如何菜单点击赋予菜单样式?

  • 把自己的声音做成语音库大概思路是怎么

    把自己的声音做成语音库大概思路是怎么

  • 使用Plupload.js预览图片的问题

    使用Plupload.js预览图片的问题

腾讯云代理商
海外云服务器