2012-01-12 7 views
1

私はユーザーを持っている、彼らは活動を作成することができますし、ユーザーが友人を持って、各ユーザーは、友達からすべての活動を得ることができるはずです。Mongodbデータベースデザイン

Users -> _id, name, friendList 
Activity -> _id, description, date, involvedUsers 

ですから、例えば文書は次のようになります。

"User theo": 1, theo, array(mike, rutger, tijmen) 
"User mike": 2, mike, array(theo, rutger, tijmen) 

Activity x: 1, 'having fun with friends', {{todaydatetime}}, array(1, 2) 
Activity y: 2, 'going out', {{saturdaydatetime}}, array(1, 2) 

だから今マイクがログインした場合、彼はマイクが同じ「友人と楽しみを持っているつもり」であることを取得する必要があり、中に「テオ」ログの場合

そして、彼らが土曜日を日付として選択すると、マイクはテオが出て行くことになり、テオはマイクが出て行く活動を得るでしょう。

これを行うにはどうすればいいですか?MySqlの結合などではかなり簡単ですが、どのようにしてユーザーの「フレンドリスト」のすべてのアクティビティを取得し、特定の日付までにフィルタリングできますか?土曜日に起こっている。

+0

は、なぜあなたが使用したいんモンゴブ? MySQLを使用して、あなたはそこでそれを行う方法を知っています。 –

+1

それは私の質問ではなかった、私はMongoDbを使用する必要があります。 – randomKek

+0

私はなぜあなたがする必要があるか尋ねることができますか? –

答えて

2

あなたはおそらく(これは完全にテストされていない場合)のような何かをしたい、とあなたは大きすぎるがあれば他の人は、右です友達リストとあなたの関与のための配列(数千人)の、それはおそらく問題をスケーリングが発生します:

collection users: 
{ 
    _id: objid, 
    name: "theo", 
    friends: [objid, objid, objid] /* these are user object ids */ 
} 

collection activities: 
{ 
    _id: objid, 
    desc: "having fun with friends", 
    date: new Date(), 
    involved: [objid, objid, objid] /* these are user object ids */ 
} 

は、私は、日付と関与にensureIndexを行うだろう。インデックス配列の値の詳細についてはこちらをご覧ください:http://www.mongodb.org/display/DOCS/Multikeys

db.activities.ensureIndex({date:1}); 
db.activities.ensureIndex({involved:1}); 

だから(シェルから)あなたはどうなるの活動に関係するユーザーを選択するには:

var start_date = new Date(2012, 1, 14); 
var end_date = new Date(2012, 1, 15); 
var friends = db.users.findOne(_id: objid for user).friends; 
var activities = db.activities.find(
    { 
    date: {$gte : start_date}, 
    date: {$lte : end_date}, 
    involved : {$in : friends} 
    }); 
+0

私は友人リストについて理解していますが、mongodbのジオコーディング機能とパフォーマンスのためにMongoDbも必要です。 MySqlに何をアドバイスしますか? – randomKek

+0

私はおそらくいずれかの方法でmongodbを使用します。より多くの友人やより多くの人をサポートするために別のスキーマを使用する必要が生じた場合、別のコレクションに分割することができます。 –

+0

は、日付選択で '$ lt'でなければ1日しか取得できません(そうでなければ、私はそれが翌日を選択することも理解しています)。 –

関連する問題