2017-06-16 9 views
-1

MongoDBでいくつかの洞察を得るためにPlural Sightコースを進めています。それは「道」の基本コースの1つで、2.0より前に作られたようです。そのような私は、先生がやっている科目のいくつかを理解するためにいくつかの問題を抱えています。C#のBsonIdに基づいてMongoDbデータを照会する

誰かがBsonIDに基づいてどのオブジェクトにどのようにFindオブジェクトを解決できるかどうかを確認したいと考えていましたか?

これは私の物である:

public class Patient 
{ 
    [BsonElement("_id")] 
    [BsonId] 
    public string Name { get; set; } 
    public ICollection<Ailment> Ailments { get; set; } 
    public ICollection<Medication> Medications { get; set; } 
} 

そして、これは私がそれを照会しようとしている方法です:

public HttpResponseMessage Get(int id) 
    { 
     var patient = _patients.Find(pat => pat._id == id).ToList(); 
     if(patient == null) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Patient Not Found.."); 
     } 
     return Request.CreateResponse(HttpStatusCode.OK, patient); 
    } 

この構文は、「がにISNとして私は、プロジェクトをビルドすることはできません。名前は_idのプロパティです。私はまた実際のプロパティIDを持っているしようとしましたが、ビルド時に問題が発生するようです(BsonIDによって作成されたIDを既に持っている可能性が高いです)。

この質問が以前に尋ねられた場合は本当に申し訳ありませんが、私は真剣にその件に関するヘルプを見つけることができませんでした。それにはたくさんのリソースがあるはずです(つまり、"c#query mongodb find BsonId"のようなものを探しているときに、私たち初心者が良い情報源を得ることができるはずです)。

これがダウン投票になるかどうかは十分に分かっていますが、時間をかけて誰かが私を助けてくれたら本当に大好きです。

+0

を、私はこれが(https://stackoverflow.com/questions/ [すでに回答されて]いると思います6063219/how-to-manage-id-field-use-poco-with-mongodb-c-sharp-driver)を使用してください。 –

+0

私が間違っていれば訂正しますが、 'ObjectId'は非推奨ですか?少なくとも私は 'BsonId'の代わりにそれを使用しようとしたとき、それは' BsonTypes'(またはそれに類するもの)にその名前のプロパティがなかったというエラーを私に投げかけていました。 – geostocker

+0

ObjectIdは、MongoのIdプロパティによく適した型(intやstringなど)です...最近のプロジェクトでは、ObjectIdの代わりにGuidを使用しましたが、すべてのモデルをMongo(永続化レイヤーを変更したい場合) BsonIdは、デフォルトの 'public ObjectId Id {get;}を使用したくない場合は、Idフィールドを修飾する属性(BsonIdAttribute)です。セット; } '。 –

答えて

0

あなたはPOCOの属性[BsonElement("_id")]に指定したMongoDBマッピングについて知らないC#クエリをまとめています。

何が欲しいのは(明確にするため)

var patient = _patients.Find(pat => pat.Name == id).FirstOrDefault(); 

EDITです:

MongoDBはC#のドライバーがあなたのPOCOの属性に基づいてフィルタ式pat => pat.Name == idを分析してます、それはMongoDBのを作成します。 "_id"フィールドを使用するあなたのための質問。

0

MongoのC#ドライバでは、idフィールド(ドキュメントを一意に識別する方法)が必要です。これは、慣習によって決定するか、明示的に指定することができます。

慣例として、Idという名前のObjectId型のパブリックメンバーを持つクラスがある場合、MongoのC#ドライバはこれが自分のIDであるとみなし、Mongoコレクションの_idというフィールドにマップされます。

public class Widget 
{ 
    public ObjectId Id { get; set; } 
    public string Foo { get; set; } 
} 

あなたは(あなたは、むしろ使用したい自然キーを持っている場合など)何らかの理由で大会に行くにしたくない場合は、あなたが使用することができます。たとえば

BongId属性を使用して、他のフィールド/タイプを自分のIDとして使用することをMongoドライバに伝えます。例えば

public class Widget 
{ 
    [BsonId] 
    public ObjectId WidgetId { get; set; } 
    public string Foo { get; set; } 
} 

またはオブジェクトID以外のタイプの使用:

public class Widget 
{ 
    [BsonId(IdGenerator=typeof(StringObjectIdGenerator))] 
    public string WidgetId { get; set; } 
    public string Foo { get; set; } 
} 
関連する問題