首先要说的是,我是 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 需要是一个整数,这样我就可以使用该值来计算下一个和上一个文档,类似于“orderWith”数字。

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

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

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

我有几个问题。
  • 我做对了吗?
  • 生成这种 commentId 的最佳方法是什么?
  • 确保commentId 在具有相同postId(upsert?)的评论中唯一的最佳方法是什么?
  • 如何处理并发查询?
  • 最佳答案



    这真的是一个很难的问题。它有效吗?它是否满足您的性能需求,您是否愿意维护它?

    MongoDB 没有任何“规范化”或“唯一正确的方式”的概念。您以适合您的方式为数据建模。



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

    通常建议的方法是使用 ObjectId/MongoId。这会给你一个唯一的ID。

    但是,您确实需要一个整数。所以看看 findAndModify 。您可以在帖子中保留“last_comment_id”,然后在创建新评论时更新它。



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

    您是否担心创建并发评论?然后查看find a modify docs。

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

    10-12 19:04