MongoDB .NET 驱动程序 2.0 中的 FindAll
FindAll in MongoDB .NET Driver 2.0
我想使用 MongoDB .NET Driver 2.0 查询我的 MongoDB 集合而不使用任何过滤器,但我没有找到方法。我有以下解决方法,但看起来很奇怪: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 中是否有一种无需过滤器即可发出查询的方法?
您不能在没有过滤器的情况下使用 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 系列驱动程序中获得相同的功能,请使用带有空 BSON 文档的 find()。
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);
}
}
}
要匹配所有元素,您可以使用 FilterDefinitionBuilder.Empty
属性。当用户可以选择查询整个集合或按单个 属性.
过滤时,我使用此 属性
如果您只想查询整个集合,而没有过滤器的可能性,则没有必要。
var builder = Builders<Object>.Filter;
matchFilter;
FilterDefinition<Object> matchFilter = builder.Empty;
var results = await collection.Aggregate()
.Match(filter)
.ToListAsync()
我想使用 MongoDB .NET Driver 2.0 查询我的 MongoDB 集合而不使用任何过滤器,但我没有找到方法。我有以下解决方法,但看起来很奇怪: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 中是否有一种无需过滤器即可发出查询的方法?
您不能在没有过滤器的情况下使用 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 系列驱动程序中获得相同的功能,请使用带有空 BSON 文档的 find()。
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);
}
}
}
要匹配所有元素,您可以使用 FilterDefinitionBuilder.Empty
属性。当用户可以选择查询整个集合或按单个 属性.
如果您只想查询整个集合,而没有过滤器的可能性,则没有必要。
var builder = Builders<Object>.Filter;
matchFilter;
FilterDefinition<Object> matchFilter = builder.Empty;
var results = await collection.Aggregate()
.Match(filter)
.ToListAsync()