首先要说的是,我是 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=4de526b67cdfa94f0f000000&comment=4
代码: $comment = $collection->findOne(array("postId"=> $theObjId, "commentId"=> (int)$commentId));
我有几个问题。
最佳答案
这真的是一个很难的问题。它有效吗?它是否满足您的性能需求,您是否愿意维护它?
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/