0

MongoDBにはユーザーが送信した投稿のコレクションがあり、他のユーザーが「スター」を付けることができます。これを達成するための最良の方法は何だろうか?

私の最初の推測は、次のようにスターを付けた投稿にユーザーIDの配列を配置することです。

{
   created:Date
   title:String
   content:String
   ...
   starred_by:[ObjectId] // Array of users by id that have starred the post
}

次に、find()を実行するときに、次の順序で注文します。

$sort: {
   starred_by:{$in:[session.user_id]},
   created:-1
}

これは可能ですか?ドキュメントを見つけるのに苦労しています。検索の結果を最初に「starred_by」フィールドで並べ替えて、スター付きの結果が最初に表示され、次に作成日で並べ替えられるようにする必要があります。

ありがとう

4

1 に答える 1

1

別のコレクションに入れることをお勧めします

{ item : ObjectID, user: ObjectID, starred_on : Date }

これは、多くのユーザーがアイテムにスターを付ける可能性があり、アイテム ドキュメントがドキュメントの制限サイズ ( 16MB ) を超える可能性があるためです。

あなたのクエリが何をするのか完全にはわかりません (特定のユーザーがスターを付けた最新の記事を表示しますか?)。特定のユーザーがスターを付けた最新のアイテムを表示する場合 (mongodb シェル):

db.starred.find({ user : session.user_id, }).sort([starred_on, -1])
于 2012-12-10T10:54:23.680 に答える