2016-08-09 16 views
0

mongodbを検索してフィールドを探すためにインターネットからの例を貼り付けるときに、次のエラーがあります。私は私が間違ってやっているかを見ることができないC#ドライバが動作していないmongodbを照会してください

、私はすぐにそれをうまくできない場合、私は戻ってSQLに行くつもりだと思う:(

私はちょうど私を見つけると言うことができるようにしたいです3つのドアと車。任意の助け

感謝!感謝。

接続コード

public MongoDatabase GetDatabase 
{ 
    get 
    { 
     MongoClient mc = new MongoClient(); 
     var server = mc.GetServer(); 
     return server.GetDatabase("players"); 
    } 
} 

コードサンプル

var numberOfDoors = 3; 

var collection = GetDatabase.GetCollection<CarCollection>("Cars"); 

// Have tried using my Car object instead of BsonDocument but little difference 
var filter = Builders<BsonDocument>.Filter.Eq("NumberOfDoors", numberOfDoors); 

var result = collection.Find(filter); 

エラーメッセージ

Argument 1: cannot convert from 'MongoDB.Driver.FilterDefinition<MongoDB.Bson.BsonDocument>' to 'MongoDB.Driver.IMongoQuery' 

文書構造

{ 
    "_id" : ObjectId("..."), 
    "Members" : [ 
     { 
      "EmailAddress" : "", 
      ... 
     }, 
     { 
      "EmailAddress" : "", 
      ... 
     }, 
     { 
      "EmailAddress" : "", 
      ... 
     } 
    ] 
} 

C#の構造

public class MemberCollection 
{ 
    public ObjectId _id { get; set; } 

    public MemberEntity[] Members { get; set; } 
} 

public class MemberEntity 
{ 
    public int _id { get; set; } 

    public string Password { get; set; } 

    public string EmailAddress { get; set; } 
} 

更新 - を示すエラーメッセージ

enter image description here

文書構造

enter image description here

更新#2

enter image description here

アップデート3

enter image description here

+0

以下FWIWような試みを与える何

わかりません。 –

+0

もちろん、これは単なるPOCですが、ありがとう – Jamie

+0

@Jamie - あなたは解決策を見つけましたか?私はまったく同じ問題を抱えています。 btw。私はmongodbネットドライバの2.5.0バージョンを使用しています。 – SoftSan

答えて

1

あなたは間違ってBuilders<CarCollection>.Filter.Eq()を使用している:

var numberOfDoors = 3; 

var collection = ..GetCollection<CarCollection>("Cars"); 

var builder = Builders<CarCollection>.Filter; 
var filt = builder.Where(car => car.NumberOfDoors == numberOfDoors); 
var list = await collection.Find(filt).ToListAsync(); 

を。これは、その前提としています

public class CarCollection : IEnumerable<Car> { ... } 

public class Car { public int NumberOfDoors { get; set; } ... } 
+0

ありがとうございます、メソッドが現在タスク<>コールを使用していないので、私は待っているを削除し、ToListに変更しましたが、私はまだ同じエラーが発生しています – Jamie

+0

あなたのコレクションを取得していますか? –

+0

@Jamie編集、謝罪を参照してください!ちょうど私の間違いを見た。 'var filt'行が変更されました。 –

0

あなたの下の行は、あなたがCarCollectionにフィルタを配置しようとしているので、それはむしろ以下でなければなりません

Builders<BsonDocument>.Filter.Eq("NumberOfDoors", numberOfDoors); 

間違っています。それがエラーの原因です。あなたの最近の編集パー

Builders<CarCollection>.Filter.Eq("NumberOfDoors", numberOfDoors); 

あなたが実際に同等のMongoDBのクエリが

だろう memberオブジェクト

var filter = Builders<MemberCollection>.Filter.Eq("Members.EmailAddress", emailAddress); 

のネストされた配列にフィルタを配置しようとしているので、あなたは以下のフィルタ定義を変更する必要があります

db.Getcollection('Members').Find({"Members.EmailAddress": "[email protected]"}) 

EDIT:

01あなたが実際に本番データベースに平文でパスワードを保存していないことを確認してください:あなたの終わり@間違っているのですが、それを
var collection = _mongoclientProvider.GetDatabase.GetCollection<MemberCollection>("Members"); 
Expression<Func<MemberCollection, bool>> expression = mc => mc.Members.Any(m => m.EmailAddress == emailAddress); 
var list = collection.Find(expression).ToList(); 
+0

'.Eq(string、string)'を使うことができないのを知りませんでした! –

+0

ありがとうございますが、私は同じ問題を抱えています – Jamie

+0

@Jamie、それが役に立ちましたら、回答を編集してください。 – Rahul

関連する問題