FindAll в MongoDB.NET драйвер 2.0

Я хочу запросить мою коллекцию MongoDB без фильтра с MongoDB .NET Driver 2.0, но я не нашел способа. У меня есть следующий обходной путь, но он выглядит странно :D

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

есть ли способ выдавать запросы без фильтра в MongoDB .NET Driver 2.0?

3 ответов


вы не можете использовать Find без фильтра.

однако вы можете использовать фильтр, который передает все:

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

или вы можете использовать пустой документ, который является эквивалентом:

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

они также добавили пустой фильтр, но он будет доступен только в новых версиях драйверов:

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

FindAll () является частью драйвера серии MongoDB 1x. чтобы получить ту же функциональность в драйвере серии 2x, используйте find() с пустым документом BSON.

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

ссылка


это работает для меня

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);
        }
    }
}