14

我想使用 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 中发出没有过滤器的查询?

4

4 回答 4

25

Find没有过滤器就不能使用。

但是,您可以使用通过所有内容的过滤器:

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

或者您可以使用等效的空文档:

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

他们还添加了一个空过滤器,但它仅在较新版本的驱动程序中可用:

var findFluent = await _fooBarCollection.Find(Builders<FooBar>.Filter.Empty);
于 2015-06-14T12:26:13.260 回答
1

FindAll() 是 MongoDB 1x 系列驱动程序的一部分。要在 2x 系列驱动程序中获得相同的功能,请使用带有空 BSON 文档的 find()。

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

参考

于 2015-09-08T11:05:29.863 回答
0

要匹配所有元素,您可以使用该FilterDefinitionBuilder.Empty属性。当用户可以选择查询整个集合或按单个属性过滤时,我会使用此属性。

如果您只想查询整个集合,而没有过滤器的可能性,那么这不是必需的。

var builder = Builders<Object>.Filter;
                 matchFilter;
                
FilterDefinition<Object> matchFilter = builder.Empty;
   
var results = await collection.Aggregate()
                              .Match(filter)
                              .ToListAsync()
于 2021-04-22T13:27:45.860 回答
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);
        }
    }
}
于 2017-09-06T15:59:46.313 回答