User{
'_id' : ObjectId(..),
'Friends': [{_id : ref1},{id : ref2}]
'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...}
}
また、別のユーザーにリンクされている各参照は、Friendsで識別されます。すべてのユーザーの友達から最も人気のある投稿を取得するための最速の方法は何ですか?たぶんトップ20だけです。
User{
'_id' : ObjectId(..),
'Friends': [{_id : ref1},{id : ref2}]
'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...}
}
また、別のユーザーにリンクされている各参照は、Friendsで識別されます。すべてのユーザーの友達から最も人気のある投稿を取得するための最速の方法は何ですか?たぶんトップ20だけです。
MongoDBを使用すると、柔軟なスキーマ設計で結合がないことを補うことができます。したがって、このスキーマでは、関係は「双方向」であると想定しています(つまり、私があなたの友達の場合、あなたは私の友達の配列にいて、私はあなたの友達の配列にいますか?)
その場合、次の集計クエリを実行できます。
db.users.aggregate([
{$match : { "Friends._id": <my _id> } },
{$unwind : "$Posts" },
{$sort : { "Posts.popularity" : -1 },
{$limit : 20 }
] )
基本的に、友達の配列に私がいるすべてのユーザーをフィルタリングし、投稿の配列を巻き戻し、並べ替えて最も人気のある投稿を最初に取得し、上位20に制限します。
「Friends._id」にインデックスがない場合、これは高速クエリではありません。