Node.js 如何为Nodejs中MongoDB官方文档中提到的每个注释创建唯一的Slug?

Node.js 如何为Nodejs中MongoDB官方文档中提到的每个注释创建唯一的Slug?,node.js,mongodb,slug,mongoid-slug,Node.js,Mongodb,Slug,Mongoid Slug,我正在阅读本文,因为我想用Nodejs和MongoDB创建一个评论系统: 有3种方法可以实现本文中提到的注释系统,第一种方法是将注释保存为单个文档 在第1种方法中,本文对将要保存在MongoDB中的每个注释使用一个“slug”(例如,“34db”)。这个“slug”用于对注释进行排序,因此它必须是唯一的 我的问题是,在创建注释时,注释的_id(MongoDB自动为保存的对象分配Object.id)未知的情况下,我们如何为要保存的注释创建这样一个唯一的“slug” 在上面提到的文章中,它使用了一

我正在阅读本文,因为我想用Nodejs和MongoDB创建一个评论系统:

有3种方法可以实现本文中提到的注释系统,第一种方法是将注释保存为单个文档

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

我的问题是,在创建注释时,注释的_id(MongoDB自动为保存的对象分配Object.id)未知的情况下,我们如何为要保存的注释创建这样一个唯一的“slug”

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


谢谢大家!

我知道这是一篇很老的帖子,但这是我的解决方案,它采用了激发灵感的功能。它用于线程注释,并收集引用的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();
  }
});
函数generateSlug(){
让slug='';
设chars='abcdefghijklmnopqrstuvxyz012456789';
for(设i=0;i<5;i++){
slug+=chars.charAt(Math.floor(Math.random()*chars.length));
}
回流段塞;
}
CommentSchema.pre('save',函数(下一步){
让评论=这个;
让timestamp=moment(comment.postedAt).format('YYYY.MM.DD.hh:MM:ss');
让slug_part=generateSlug();
让full_slug_part=时间戳+':'+slug_part;
if(comment.parent\u id){
Comment.findOne({''u-id':Comment.parent\u-id},{slug:1,full\u-slug:1})
。然后(父项=>{
comment.slug=parent.slug+'/'+slug_部分;
comment.full_slug=parent.full_slug+'/'+full_slug_part;
next();
});
}否则{
comment.slug=slug\u零件;
comment.full_slug=时间戳+':'+slug_部分;
next();
}
});

我知道这是一篇很老的文章,但这是我的解决方案,它采用了激发灵感的功能。它用于线程注释,并收集引用的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();
  }
});
函数generateSlug(){
让slug='';
设chars='abcdefghijklmnopqrstuvxyz012456789';
for(设i=0;i<5;i++){
slug+=chars.charAt(Math.floor(Math.random()*chars.length));
}
回流段塞;
}
CommentSchema.pre('save',函数(下一步){
让评论=这个;
让timestamp=moment(comment.postedAt).format('YYYY.MM.DD.hh:MM:ss');
让slug_part=generateSlug();
让full_slug_part=时间戳+':'+slug_part;
if(comment.parent\u id){
Comment.findOne({''u-id':Comment.parent\u-id},{slug:1,full\u-slug:1})
。然后(父项=>{
comment.slug=parent.slug+'/'+slug_部分;
comment.full_slug=parent.full_slug+'/'+full_slug_part;
next();
});
}否则{
comment.slug=slug\u零件;
comment.full_slug=时间戳+':'+slug_部分;
next();
}
});

如果您想要创建随机数量的字符串外观的解决方案:将来,您可以通过询问有关生成唯一段塞的问题来缩小问题范围。实际上,我想为新创建的注释创建唯一的内容(唯一url段塞)。当然,是的,它很长,如果您想要创建随机数量的字符串外观的解决方案,我将尝试缩小它:将来,您可以通过询问有关生成唯一段塞的问题来缩小问题范围。实际上,我想为新创建的注释创建唯一的内容(唯一url段塞)。当然,是的,它很长,我将尝试缩小它