2015-06-14 5 views
8

Ich möchte meine MongoDB-Sammlung ohne Filter mit MongoDB .NET Driver 2.0 abfragen, aber ich habe keinen Weg gefunden. Ich habe folgendes Problem zu umgehen, aber es sieht seltsam: DFindAll in MongoDB .NET-Treiber 2.0

var filter = Builders<FooBar>.Filter.Exists(x => x.Id); 
var fooBars = await _fooBarCollection.Find(filter) 
    .Skip(0) 
    .Limit(100) 
    .ToListAsync(); 

Gibt es eine Möglichkeit Anfragen zur Ausgabe ohne Filter in MongoDB .NET Driver 2.0?

+0

Wie wäre es ein ** leer ** BSON Dokument verwenden. Das ist die grundlegende Shell-Anforderung. –

+0

Können Sie ein Beispiel-Snippet freigeben? Ich weiß nicht, was du genau meinst: s – tugberk

+0

Viele Beispiele rumschlendern. Haben Sie sogar versucht, Ihre '.Find()' ohne einen "Filter" zu senden? Das bedeutet ** alles ** für die meisten von uns. Ansonsten nur: 'new BsonDocument()' –

Antwort

15

Sie können Find nicht ohne Filter verwenden.

Sie können jedoch einen Filter verwenden, das alles passiert:

var findFluent = await _fooBarCollection.Find(_ => true); 

Oder können Sie ein leeres Dokument verwenden, das entspricht:

var findFluent = await _fooBarCollection.Find(new BsonDocument()); 

Sie haben auch einen leeren Filter hinzugefügt, aber es wird nur in neueren Versionen des Treibers verfügbar sein:

var findFluent = await _fooBarCollection.Find(Builders<FooBar>.Filter.Empty); 
+0

@ i3arnon thx! Ich mochte die leere Filterlösung. – tugberk

+0

@tugberk sicher, jederzeit ... – i3arnon

1

FindAll() ist der Teil von Mong oDB 1x Serientreiber. Um die gleiche Funktionalität in der 2x-Serie zu erhalten, benutze find() mit leerem BSON-Dokument.

var list = await collection.Find(new BsonDocument()).ToListAsync(); 
foreach (var dox in list) 
{ 
    Console.WriteLine(dox); 
} 

Reference

0

Es funktioniert für mich

public class TestProductContext 
{ 
    MongoClient _client; 
    IMongoDatabase _db; 

    public TestProductContext() 
    { 
     _client = new MongoClient("mongodb://localhost:27017"); 
     _db = _client.GetDatabase("EmployeeDB"); 

    } 

    public IMongoCollection<Product> Products => _db.GetCollection<Product>("Products"); 
} 

public class DataAccess 
{ 
    private TestProductContext _testProductContext; 

    public DataAccess(TestProductContext testProductContext) 
    { 
     _testProductContext = testProductContext; 
    } 
    public List<Product> GetProducts() 
    { 
     List<Product> pto = new List<Product>(); 
     var cursor = _testProductContext.Products.Find(new BsonDocument()).ToCursor(); 
     foreach (var document in cursor.ToEnumerable()) 
     { 
      pto.Add(document); 
     } 
    } 
}