2011-08-21 5 views
12

最近私はmongodb公式ドライバで遊んでいました。 私が遭遇した問題は、クエリ投影を作成する方法でした。私は永続オブジェクトを持っている場合 例はMongoDB 10genドライバのクエリ投影

class A{ 
    id 
    PropA 
    PropB 
    List<LargeObjects> 
} 

どのように私は唯一の全体オブジェクトを取得するのではなく、ID、がpropaとPropBを取得することができますか? mongodbの公式C#ドライバはどうすればできますか?

+1

Q.PはMongoCollection <>によって利用できます。Find()。SetFields(include/exclude); –

+0

setfieldsは私の意見ではありません。単にドキュメント内の値をnullにするだけで、まだ完全なドキュメントをいくつかのヌル値で作成しています。 –

答えて

0

を使用FindAs<>()したいフィールドのみを含むタイプで。 docsを参照してください。

[BsonIgnoreExtraElements]またはそのクラスの[BsonExtraElements]属性を追加します。 docsを参照してください。

+0

基本的に、コレクションからのSetField呼び出しがqpを作るのに十分であることが判明しました –

13

クエリ投影を介して利用できます。あなたはこのためにLINQクエリの下に使用することができます

MongoCollection<>.Find().SetFields(include/exclude); 
0

モンゴープロファイラー私は、Linqの結果がクライアントに投影されることがあると判断することができました。したがって、お客様のニーズに応じて異なります。 Mongoサーバからの部分データを含む結果のドキュメントを返す場合は、MarjanまたはIanの回答を使用することになります。それ以外の場合は、レコードを読み込んで別のデータ型に投影する場合は、Linqを使用します。

5

公式の10gen MongoDB C#ドライバのv1.8から(前回の回答でZambonilliと同様に)Select linq演算子は、dbサーバーではなくクライアント側で常に実行されます。 (また、前の回答でスニル・ラジにより提供される)

ドキュメント:http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

ほぼ半分ページダウン、「選択」LINQクエリ演算子の下では、読み込み大きな赤いボックスです:

警告:選択すると、サーバーから返されるフィールドが少なくなりません。ドキュメント全体がプルバックされ、ネイティブのSelectメソッドに渡されます。したがって、投影はクライアント側で実行されます。

関連する問題