2015-12-30 7 views
6

私はこれらの2つのコレクションがある場合:mongoDB内のドキュメントにインデックスを付ける方法はありますか?

​​

をそして私はFTSのインデックスブックにしたいです。 ユーザー名が書籍コレクションに明示的に格納されていなくても、ユーザー名で検索できるようにすることはできますか?

つまり、移入されたコレクションのインデックスを作成することは可能ですか(または推奨する)ことはできますか?

おかげ

+0

は、これらを参照してください。 http://stackoverflow.com/questions/13026486/how-to-populate-a-sub-document-in-mongoose-after-creating-it ます。http:// mongoosejsを。 com/docs/api.html#model_Model.populate –

+0

index:trueを追加すると、参照はコレクション内でインデックスに登録されますか? –

+4

いいえ。別のコレクションの「ユーザー名」(または他のフィールド)に含まれるデータに対しては、何らかの検索(FTSなど)を行うことはできません。これはMongoDBがしない(結合 '$ lookup'を除く)「結合」であり、実際には結合ではなく、別々の検索クエリを実行する便利なラッパーです。一度に1つのコレクションのデータのみを検索するようデータベースに依頼することはできます。 –

答えて

1

ブレイクスセブン述べたように、それはコレクション全体でインデックスすることはできません。

この種の全文検索が私のアプリケーションに最も重要な場合、古典的な解決策は、フィールドを非正規化して両方のコレクションに含めることです。今、あなたはauthor.usernameにインデックスをすることができます

Book: { 
    title: String, 
    description: String 
    author: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User', 
    ### New field ### 
    username: String 
    }, 
} 

:この場合、あなたのBookコレクションは次のようになります。

それは良いアイデアかどうかは、アプリケーションに完全に依存しています。欠点は、コレクション全体にusernameを同期させ、各文書に不必要な重みを追加することです。

関連する問題