我正在研究这个项目.这就像一个社交网络,我们可以有用户,帖子,图片等,然后出现了这个问题.我们习惯于Mysql和"几乎神奇"的自动增量字段,现在我们不能再依赖它了.我知道Mongo中的_id对象提供了一种识别文档的简便方法,因为它保证了文档的唯一性.但关键不是用户友好,这就是我们需要的,所以我们可以制作如下网址:
http://website.com/posts/{post_id}
http://website.com/{user_id}
Run Code Online (Sandbox Code Playgroud)
我开发了一个解决方案,但我认为这不是最好的方法.我首先创建一个只有一列的mysql表.此列存储user_id,它是一个自动增量字段.对于mongo上的每个新记录,我在这个mysql表中插入一个新行并获取带有"LAST_INSERT_ID"函数的user_id,现在我可以使用数字ID在我的mongo集合中插入我的数据.而其他好处是我可以擦除我的mysql表,因为id已经存储在mongo中了一百万行.我做错了吗?
为什么不为用户使用slugs作为帖子和用户名?这应该是人类可读的.
首先,我认为在生成的id mongo提供的数据上使用任意自动递增数字没有任何好处.不仅不仅仅是一个任意的id,而且你必须保持序列.
也就是说,为什么不让mongo管理id,并为你的URL使用另一个唯一标识符.如果您的用户拥有"用户名",我假设您已经确定该系列在整个系列中都是独一无二的.只需通过该唯一属性进行查询,而不是通过id查找.
这也允许用户更改其唯一标识符,而无需重新映射数据库中的关联.
而对于帖子,只需从标题中生成一个独特的slug.
您也可以在Mongo而不是MySQL中创建id,...这里有一些关于如何实现它的文档和文章
http://www.mongodb.org/display/DOCS/How+to+Make+an+Auto+Incrementing+Field
http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb