使用MongoDB C#驱动程序查询构建器获取项目计数

Bob*_*way 9 mongodb mongodb-.net-driver

使用MongoDB的c#驱动程序,我可以轻松地构建一个查询,然后我可以添加SetSkip()和SetLimit()参数来将结果集限制为一定的大小.

但是我希望能够在执行查询并将整个结果集(可能很大)加载到内存中之前应用Skip和Take之前知道查询的项目数.

看起来我可以通过使用count()命令直接通过shell对MongoDB执行此操作.例如:

 db.item.find( { "FieldToMatch" : "ValueToMatch" } ).count()
Run Code Online (Sandbox Code Playgroud)

这只返回一个整数,这正是我想要的.但我在文档中看不到通过C#驱动程序执行此操作的方法.可能吗?

(应该注意的是,我们已经广泛使用了查询构建器,所以理想情况下我宁愿通过查询构建器执行此操作,而不是通过驱动程序向shell发出命令,如果可能的话.但如果这是唯一的话解决方案然后一个例子会有所帮助,谢谢.)

干杯,马特

And*_*ich 15

你可以这样做:

var server = MongoServer.Create("mongodb://localhost:27020");
var database = server.GetDatabase("someDb");

var collection = database.GetCollection<Type>("item");
var cursor = collection.Find(Query.EQ("FieldToMatch" : "ValueToMatch"));

var count = cursor.Count(); 
Run Code Online (Sandbox Code Playgroud)

一些说明:

  1. 你应该只有一个服务器实例(单例)
  2. 最新的驱动程序版本实际上返回长计数而不是int
  3. 迭代后,Cursor仅提取数据
  4. 你可以在实际加载数据之前配置很多东西,比如skip,take,指定要在游标中返回的字段(开始迭代)
  5. 游标的Count()方法仅加载文档计数