2016-05-03 5 views
0

私は単純なmogodbデータベースを持っており、C#を使用してドキュメントのコンテンツを表示したいとします。これまで私は次のコードを書いています:C#ドライババージョン2.2.0とVS2015を使用してmongodbからデータを取得する方法

var mongo_client = new MongoClient(); 
var mongo_database = mongo_client.GetDatabase("database_name"); 
var collection=mongo_database.GetCollection<BsonDocument>("collection_name"); 
    using (var cursor = await collection.Find(new BsonDocument()).ToCursorAsync()) 
    { 
     while (await cursor.MoveNextAsync()) 
     { 
      foreach (var doc in cursor.Current) 
      { 
       Console.WriteLine(doc); 
      } 
     } 
    } 

上記のコードは、非同期メソッドに挿入されています。接続は確立されていますが、内部でコードを実行できないようです。プロジェクトにMongoDB.Driver、MongoDB.Driver.Core、MongoDB.Bsonという参照を追加しました。 命令Console.Writeline(doc);は実行されていないため、何も表示されません。しかし、なぜ?

答えて

0

ことはあなたのフィルタを変更してみてください:

var mongo_client = new MongoClient(); 
      var mongo_database = mongo_client.GetDatabase("database_name"); 
      var collection=mongo_database.GetCollection<BsonDocument>("collection_name"); 
      using (var cursor = await collection.Find(FilterDefinition<BsonDocument>.Empty).ToCursorAsync()) 
      { 
       while (await cursor.MoveNextAsync()) 
       { 
        foreach (var doc in cursor.Current) 
        { 
         Console.WriteLine(doc); 
        } 
       } 
      } 

また、あなたがメモリ内のすべてのレコードを収めることができた場合(それは小さな集まりです?)あなたは、単にToListAsyncを試すことができます。

var mongo_client = new MongoClient(); 
      var mongo_database = mongo_client.GetDatabase("database_name"); 
      var collection=mongo_database.GetCollection<BsonDocument>("collection_name"); 
      var allRecords = await collection.Find(FilterDefinition<BsonDocument>.Empty).ToListAsync(); 

      foreach (var doc in allRecords) 
      { 
       Console.WriteLine(doc); 
      } 
+0

いいえ何も表示されません – nix86

+0

'document_name'コレクションにはドキュメントがありますか? –

0

私が見つけました溶液。これは正しいコードです:

  var mongo_client = new MongoClient(); 
      var mongo_database = mongo_client.GetDatabase("database_name"); 
      var collection=mongo_database.GetCollection<BsonDocument>("collection_name"); 
      var records = collection.Find(FilterDefinition<BsonDocument>.Empty).ToList(); 
      foreach (var doc in records) 
      { 
       Console.WriteLine(doc); 
      } 

非同期メソッドを作成する必要はありません。 await演算子を使用する必要はありません。はるかに簡単です。

+0

"FilterDefinition .Empty"を "new BsonDocument()"に置き換えても機能します。 – nix86

+0

「使用する必要がない」という理由だけで使用してはならないわけではありません –

関連する問題