我正在看这篇文章,因为我想用 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/