Redisには、選択基準としてフィールド値を使用してハッシュを直接検索する方法はありません。現在のデータモデルでは、すべての記事ハッシュを取得して一致しないハッシュを破棄するだけですが、効率的ではありません。
実際、インデックスは自分で管理する必要があります。あなたはハッシュの中にセットを持つことができないので、私は作者の記事のIDを含む別々のセットを持つことでこれを行います。このマッピングのため
author_1: { "name": "John Smith", ... "id": 1 }
author_2: { "name": "Jane Doe", ... "id": 2 }
そしてセット:こうすることで、あなたは著者のハッシュを持っています
author_1_articles: [1, 3]
author_2_articles: [2]
そして、それはこれらの記事にマップ:お好きな時に、今
article_1: { "title": "My title", ... "authorId": 1 }
article_2: { "title": "Another one", ... "authorId": 2 }
article_3: { "title": "What a story", ... "authorId": 3 }
著者Xの記事を取得するには、SMEMBERS author_X_articlesが表示され、記事IDのリストが表示されます。
私は、著者が同じ記事を複数回追加すると、Redisはそれを無視するだけなので、セットを使用します。あなたが得る記事のリストは決して重複することはありません。記事がすでにセットに入っているかどうか最初にチェックすることなくSADDを使うことができます。
これは多くの作業のように聞こえるかもしれません。データモデルが複雑で、すばやく必要なアクセスパターンがたくさんある場合にはそうです。あなたがやることは、独自のインデックスを維持することです。そのためには、データを複製して最新の状態に保つ必要があります。これはNoSQLのトレードオフです...