2016-03-23 10 views
0

こんにちは私は、ユーザーが他のユーザーをフォローして、そのユーザーの活動を見ることができるプロジェクトをやっています。 は、今の私は、ユーザーが次のことをユーザーの最後の活動を選択することができますどのように、このスキーマこのスキーマで次のユーザーのアクティビティを選択してください

Schema.Activity = new SimpleSchema({ 
    actionType: { 
    type: Number 
    } 
    userId: { 
    type: String   
    },  
    createdAt: { 
    type: Date 
    } 
}); 

Schema.User = new SimpleSchema({ 
    .... 
    followedBy: { // array of user._id 
     type: [String], 
     optional: true 
    } 
}); 

を持つ2つのコレクションをやりましたか」? SQLで、それはのようになります。

"SELECT actions.* FROM actions INNER JOIN users ON actions.userId = users._id 
WHERE " + currentUserId + " IN (users.followedBy) " 

流星でそれを行うためのより良い方法は何ですか?

ありがとうございます!

+0

MongoDB(クエリが実行されるエンジン)は、実際にはジョインを実行しません。 * "一種のLEFT JOIN" *ですが、集約パイプラインのための['$ lookup'](https://docs.mongodb.org/manual/reference/operator/aggregation/lookup/)がありますが、 **他のクエリフォームでは結合を実行しません。このため、[埋め込み](https://docs.mongodb.org/manual/tutorial/model-embedded-one-to-many-relationships-between-documents/)を使用しています。私はそれと[Data Model Examples and Patterns](https://docs.mongodb.org/manual/applications/data-models/)のセクション全体を読むことをお勧めします。これはNoSQLです。 SQLではありません。 –

答えて

0

次の2つのステップでそれを行うことができます。

let recentActivity = Activity.find({userId: {$in: followedIds }},{sort: {createdAt: -1}, limit: 100 });

  1. は、あなたがそれらの人々の最近の活動をゲット

  2. let followedIds = User.find({followedBy: {$in: myUserId }},{fields: {_id: 1}}).fetch().map(function(u){return u._id});従う人々の配列を取得します。

reywood:publish-compositeパッケージは、他のコレクションに関連するコレクションでpub-subを実行する際に役立ちます。

関連する問題