gpt4 book ai didi

php - MongoDB (PHP) - 自定义 "id"和 OrderWith 编号

转载 作者:可可西里 更新时间:2023-11-01 09:28:28 26 4
gpt4 key购买 nike

首先要说的是,我是 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));

我有几个问题。

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

最佳答案

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?

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

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

关于php - MongoDB (PHP) - 自定义 "id"和 OrderWith 编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com