2016-10-19 12 views
3

MongoDBは初めてです。 私はPHPで簡単な練​​習プロジェクトを開発しようとしています。MongoDB投稿のための「好き」を保存するための最適なテクニック

{ 
    "_id": ObjectId("57f099cf1ccbdd780b000029"), 
    "first_name": "Foo", 
    "last_name": "Bar", 
    "username": "foobar", 
    "email": "[email protected]", 
    "password": "$2y$10$5ec2yYQ8Xl1HH3zM6205LupR7hf/xOLLW9vU7VMYiUc317HB6p76e" 
} 

postsコレクションドキュメンタリーの

例:ユーザーがコレクション内の文書の

usersコレクション

例:

は、私は次のように2つのコレクションを持っていますポストコレクションにメンター:

{ 
    "_id": ObjectId("57ef7be11ccbdd4c17000029"), 
    "uid": ObjectId("57e6ff571ccbdd6016000029"), 
    "content": "Data of the post goes here!", 
    "time": NumberInt(1475312609), 
    "likes": [], 
    "comments": [] 
} 

likesキーが配列のようにユーザーIDを保存します。

私が直面している問題は、ユーザーがすでに投稿を気に入っている場合、違うボタンを表示することです。その場合、(セッションに格納されている)現在のユーザのユーザIDがlikesの配列であるかどうかをチェックする必要があります。

今、私はlikes配列全体をフェッチしており、PHPでユーザーIDを確認しています。

私はこの問題の最適な解決策は何だろうと考えていました。

ありがとうございました!

+1

私は好きなもののために別のコレクションを作成します。 –

+0

キーバリューペアを維持しますか?キーはポストIDで、値はユーザーIDです。あなたはこのテクニックを暗示していますか? – John

答えて

2

ポストコレクションでカウンタを管理できます。 時間の複雑さを軽減する最適な方法は、別のコレクションを作成することです。 ユーザにはキーとしてのポストIDと値としてのユーザIDがあります。

その後、あなたは、この操作を実行することができます。

db.likes.find({"post_id": "user_id"}) 

これはあなたに特定のユーザーIDの結果を与えるとidの組み合わせを掲載します。

注:この方法は時間の複雑さの点では優れていますが、毎回post_idを保存するためにメモリを使用します。

関連する問題