node.js - 如何在 Nodejs 中为 MongoDB 官方文档中提到的每条评论创建唯一的 Slug?

标签 node.js mongodb slug

我正在看这篇文章,因为我想用 Nodejs 和 MongoDB 创建一个评论系统:

https://docs.mongodb.org/ecosystem/use-cases/storing-comments/

本文提到有 3 种方法来实现评论系统,第一种方法是将评论保存为单个文档。

在第一种方法中,文章对要保存在 MongoDB 中的每个评论使用“slug”(例如“34db”)。这个“slug”用于对评论进行排序,因此它必须是唯一的。

我的问题是,考虑到在创建评论时,评论的_id(MongoDB自动为保存的对象分配一个Object.id)未知,我们如何为我们要保存的评论创建这样一个唯一的“slug”?

在上面提到的文章中,它使用了一个名为“generate_pseudorandom_slug()”的伪方法。我想知道我们如何在实际情况中实现这样的方法,以获得像“34db”这样独特的评论?

谢谢!

最佳答案

我知道这篇文章已经过时了,但这是我的解决方案,它采用了 inspired 使用的函数。它用于线程注释,并收集引用的 MongoDB 文章中提供的概念。我的 models/comment.js 路径中有此代码,很可能会将generateSlug() 函数拉出到 utils.js 文件并将其导入回。

function generateSlug() {

  let slug = '';
  let chars = 'abcdefghijklmnopqrstuvwxyz0123456789';

  for ( let i = 0; i < 5; i++ ) {
    slug += chars.charAt(Math.floor(Math.random() * chars.length));
  }

  return slug;
}

CommentSchema.pre('save', function (next) {
  let comment = this;
  let timestamp = moment(comment.postedAt).format('YYYY.MM.DD.hh:mm:ss');
  let slug_part = generateSlug();
  let full_slug_part = timestamp + ':' + slug_part;

  if ( comment.parent_id ) {
    Comment.findOne({'_id': comment.parent_id }, { slug: 1, full_slug: 1 })
      .then(parent => {
        comment.slug = parent.slug + '/' + slug_part;
        comment.full_slug = parent.full_slug + '/' + full_slug_part;
        next();
      });
  } else {
    comment.slug = slug_part;
    comment.full_slug = timestamp + ':' + slug_part;
    next();
  }
});

关于node.js - 如何在 Nodejs 中为 MongoDB 官方文档中提到的每条评论创建唯一的 Slug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33999258/

相关文章:

django - 在 urls.py 中使 slugs 正常工作时遇到问题

javascript - 对于 html 表单发布请求,formdata 对象为空

javascript - Flot 不适用于 node.js

c# - 如何在 c# foreach 循环中使用 MongoDB 的 Query 和 QueryBuilder?

ruby-on-rails - 清理 URL slug 的 Unicode 字符串 (Ruby/Rails)

crash - Heroku 应用程序崩溃

javascript - Mongodb find 不适用于 Objectid

linux - 如何使用nodejs创建一个linux用户

mongodb - Spring Data Mongo 可以只更新文档中的脏字段吗?

Javascript 作用域规则和 mongo map/reduce 函数