首先說我是MongoDb和麪向文檔的db的新手。MongoDB(PHP) - 自定義「id」和OrderWith編號
在mongodb中嵌入文檔出現問題後(無法只選擇嵌套文檔(例如博客文章中的單個評論)), 我重新設計了db。現在我有兩個集合,文章和評論(不是真正的交易,爲了方便起見使用博客示例)。
示例 - 帖子收集文件:
陣{
'_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後= 4de526b67cdfa94f0f000000 &評論= 4
代碼:$評論= $收藏 - > findOne(陣列( 「帖子ID」 => $ theObjId,「commentId」=>(int)$ commentId));
我有幾個問題。
- 我在做對吧?
- 什麼是生成這種commentId的最佳方式?
- 確保commentId在具有相同postId(upsert?)的評論中獨一無二的最佳方法是什麼?
- 如何處理併發查詢?
@Gates和@Earlz 感謝您的幫助,但最終我將使用ref和MongoId。 – 2011-06-03 19:36:16
哇...我不知道評論有5分鐘的窗口編輯:( 這是其餘的前一個。 @蓋茨和@埃爾茲 感謝您的幫助,但最後我要去在MongoId中使用ref,Post文件將有一個mongoids數組引用不同集合中的註釋,Mongo的「自動遞增」數組鍵將作爲整數使用,我想我可以排序並選擇上一個和下一個元素。 – 2011-06-03 19:49:52
嗯,我沒有明白爲什麼你將這些註釋存儲在一個單獨的集合中,這從面向doc的(非關係的)觀點來看沒有任何意義,並且與MongoDB的概念背後的想法有些矛盾。在您的帖子集合中引用MongoIds數組並沒有任何意義,因爲這會導致性能下降和可怕的維護狂歡,而不是在進一步的數據庫重新設計上浪費精力......也許提出另一個關於嵌入的「麻煩」問題是個好主意。我相信有合適的解決方案...;) – proximus 2011-06-03 20:21:47