2015-06-14 87 views
8

我想查詢我的MongoDB集合,沒有使用MongoDB .NET驅動2.0的任何過濾器,但是我沒有找到辦法。我有以下的解決方法,但它看起來怪異:d在MongoDB .NET驅動2.0中查找所有

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

有沒有辦法發出查詢,而不在MongoDB的.NET 2.0驅動程序的過濾器?

+0

如何使用** **空文件BSON。這是基本的外殼要求。 – 2015-06-14 12:22:49

+0

你能分享一個樣本片段嗎?我不知道你到底意味着什麼:s – tugberk

+0

大量的例子正在洗牌。你甚至嘗試提交你的'.Find()'沒有「過濾器」?這意味着**所有**對我們大多數人。否則只是:'new BsonDocument()' – 2015-06-14 12:26:00

回答

15

不能使用Find沒有過濾器。

但是,您可以使用經過過濾的一切:

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

或者你可以使用一個空文件就相當於:

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

他們還增加了一個空的過濾器,但它僅會可用於更新版本的驅動程序:

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

@ i3arnon thx!我喜歡空的過濾器解決方案。 – tugberk

+0

@tugberk當然,任何時候... – i3arnon

1

FindAll()是Mong的一部分oDB 1x系列驅動程序。在2x系列驅動程序中使用find()和空BSON文檔獲得相同的功能。

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

Reference

0

它爲我

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); 
     } 
    } 
} 
相關問題