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