2017-01-09 7 views
0

は、私は、次のしている:MongoDBの/ C#の投影誤理解

var P = Builders<T>.Projection.Include(_ => _.AccountId); 
var R = Mongo.Find(E).Project(P).FirstOrDefault(); 

ここに私は理解していないものだ。その突起が

、私はACCOUNTIDも_id含めるTを必要としています。 私は_idが含まれていない場合は、私は次のエラーを取得する:

{"Element '_id' does not match any field or property of class T."} 

私は以下のようにして、_idを除外しようとした場合:

var P = Builders<T>.Projection.Include(_ => _.AccountId).Exclude(_ => _._id); 
var R = Mongo.Find(E).Project(P).FirstOrDefault(); 

私は別のエラーを取得:

{"Element 'CreatedOn' does not match any field or property of class T."} 

CreatedOnは、DBのレコードの別のフィールドです。 私は1つのフィールド(AccountId)とそれ以外のもの(_id)などを抽出する必要があります(そして、理想的には文字列にマップします。文字列だけのクラスですが、それは二次的な問題です)

私は何が欠けていますか?

を除外しながら、「すべてを取る」と特定のフィールドを除外する意味でしょうか?私は、手段が白紙の状態を取る含めることを理解して指定されたすべてのフィールドが(何らかの理由と_id)ステートメントを含める追加するアム その場合、これらの2つのコマンドは排他的です。私の投影で

Expression(_ => _.AccountId) 

を、と私は私が望む結果を得るが、これは含める/除外

+0

CreatedOnDateTimeであると仮定した場合)ので、同様にクラスTにそのフィールドを追加する必要があります。私はそれを変換するC#の多くの知識を持っていない。 (新しいArrayList <>())のリスト items = newColl.find()。投影(フィールドを含める( "accountId")、excludeId())) )); '。あなたがそれを理解できるかもしれない。 – Veeram

+0

私が理解できないことは、インクルード指示が含まれているものだけを意味し、除外がすべて除外されていることを意味し、どのように一緒に働くことができるかということです。もしincludeがAccountIdを呼び出すならば、含まれていないものは存在しないと仮定することができます。 excludeディレクティブの場合は真であるため、両方を併用すると競合が発生します。わかりません – Thomas

+0

Atleast Java mongoドライバの実装では、最後に定義された順番でピッキングすることによって競合する投射を処理します。私はそれを自分でテストしていない。 – Veeram

答えて

0

を明確にしないエラーがドキュメントがで返されることを示します。

また、私が使用することができますデータベースにはのクラスには存在しないフィールドCreatedOnが含まれています。あなたは、これは私がJavaでやる方法です

public DateTime CreatedOn { get; set; } 
+0

しかし、それは投影の目標を破っています:私は特定のフィールドだけを返したい、そしてCreatedOnはそれらの一つではありません。私は特にAccountIdが欲しいですが、他には何もありません。 – Thomas

+0

@Thomasあなたは 'T'の定義を投稿できますか? –

+0

TはAccountIdと_idだけのクラスです(それ以外の場合はエラーがあるため) – Thomas

関連する問題