2017-02-25 12 views
0

MongoDBの会話用スキーマを作成しました。ここで、メッセージは会話オブジェクトのオブジェクトの配列として格納されます。MongoDBサブ文書問合せパフォーマンス大規模データセット

Conversation { 
    company_id: { type:ObjectId, index: true }, 
    messages: [{ 
        _id: { type: ObjectId, index: true } 
    }] 
} 

配列(つまり、アプリケーションの別の部分から送信されている)に送られた最初のメッセージののcompany_idと_idに基づいて会話を見上げる場所で私が持っているクエリがあります。

Conversation.findOne({ company_id: c_id, messages._id: firstMessage }) 

理論的には、同社は億人の会話を持っており、それらの会話のそれぞれが、私はむしろ、その後、私は最初のメッセージを格納し、サブドキュメントのクエリのために必要がありますパフォーマンスの問題のどれだけの100万件のメッセージを、持っている場合idをメイン文書に追加し、基本オブジェクトだけをクエリしますか?

Conversation { 
    company_id: { type:ObjectId, index: true }, 
    firstMessage_id: { type:ObjectId, index: true }, 
    messages: [{ 
        _id: { type: ObjectId, index: true } 
    }] 
} 

Conversation.findOne({ company_id: c_id, firstMessage_id: firstMessage }) 

ご協力いただきありがとうございます。

答えて

0

個々のメッセージが100万件の場合は、別々のコレクションにまとめておき、集計フレームワークの$ルックアップをバージョン3.4で使用して結果を得ることができます。もちろん、両方のコレクションに適切なインデックスがあり、適切なフィルタを使用して会社とマッチすると仮定します。

+0

マリオ、答えてくれてありがとう。実際には、会話に格納されたIDを持つ別のコレクションとしてのメッセージがありますが、サブオブジェクトの検索とオブジェクトのクエリの計算についてはさらに疑問に思っていました。 – Dfranc3373

関連する問題