使用MongoDB的c#驱动程序我可以轻松地构建一个查询,然后我可以添加SetSkip()和SetLimit()参数来将结果集限制到一定的大小。
但是我希望能够在应用Skip和Take 之前知道查询的项目数,而不执行执行查询并将整个结果集(可能很大)加载到存储器中。
看起来我可以通过使用count()命令直接通过shell对MongoDB执行此操作。 e.g:
db.item.find( { "FieldToMatch" : "ValueToMatch" } ).count()
只返回一个整数,这正是我想要的。但我在文档中看不到通过C#驱动程序执行此操作的方法。有可能吗?
(应该注意的是,我们已经广泛使用了查询构建器,所以理想情况下我宁愿通过查询构建器执行此操作,而不是通过驱动程序向shell发出命令,如果可能的话。但是如果可行的话。这是唯一的解决方案然后一个例子会有所帮助,谢谢。)
干杯, 马特
答案 0 :(得分: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();
一些注意事项:
答案 1 :(得分:1)
我正在使用Driver 2.3.0,现在也可以这样做:
...
IMongoCollection<entity> Collection = db.GetCollection<entity>(CollectionName);
var yourFilter = Builders<entity>.Filter.Where(o => o.prop == value);
long countResut = Collection.Count(yourFilter);