微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB(PHP) – 自定义“id”和OrderWith编号

首先要说的是我是MongoDb和面向文档的数据库的新手.

mongodb中嵌入文档有些麻烦(无法只选择嵌套文档(博客文章中的单个评论示例)),
我重新设计了数据库.现在我有两个收藏,帖子和评论(不是真正的交易,为了方便起见,使用博客示例).

示例 – 发布集合文档:

数组{

'_id'   :  MongoId,

'title' : 'Something',

'body'  : 'Something awesome'   

}

示例 – 评论文档:

数组{

'_id'    : MongoId,

'postId' : MongoId,

'userId' : MongoId,

'commentId' : 33,

'comment' : 'Punch the punch line!'

}

正如您所看到的,我有多个评论文档(正如我之前所说,我希望能够选择单个评论,而不是它们的数组).

我的计划是:我想使用postId和commentId从集合中选择单个注释(commentId仅在具有相同postId的注释中具有唯一值).
哦,commentId需要是一个int,这样我就可以使用该值来计算下一个和以前的文档,排序为“orderWith”号.

现在我可以得到这样的评论

URI:mongo.PHP?post = 4de526b67c​​dfa94f0f000000& comment = 4

代码:$comment = $collection-> findOne(array(“postId”=> $theObjId,“commentId”=>(int)$commentId));

我有几个问题.

>我做得对吗?
>生成这种评论的最佳方法是什么?
>确保commentId在具有相同postId(upsert?)的注释中是唯一的最佳方法是什么?
>如何处理并发查询

解决方法:

Am I doing it right?

这是一个非常棘手的问题.它有用吗?它是否满足您的性能需求,您是否愿意维护它?

MongoDB没有任何“规范化”或“真正的方式”的概念.您可以以适合自己的方式为数据建模.

What is the best way to generate that kind of commentId?
What is the best way to ensure that commentId is unique among comments with the same postId (upsert?)?

这确实是一个复杂的问题.如果要生成单调递增的整数ID(如自动递增),则需要一个中央权限来生成这些整数.这不会很好地扩展.

通常建议的方法是使用ObjectId / MongoId.这将为您提供一个唯一的ID.

但是,你真的想要一个整数.请看一下findAndModify.您可以在帖子上保留“last_comment_id”,然后在创建新评论时更新它.

How to deal with concurrent queries?

为什么并发查询会成为问题?两个读者应该能够访问相同的数据.

您是否担心会创建并发评论?然后查看查找修改文档.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐