使用 MongoDB 的 C# 驱动程序,我可以轻松构建一个查询,然后可以添加 SetSkip() 和 SetLimit() 参数以将结果集限制为特定大小。
不过,我希望能够在应用 Skip 和 Take 之前知道查询的项目数是多少without执行查询并将整个结果集(可能很大)加载到内存中。
看起来我可以使用 count() 命令直接通过 shell 对 MongoDB 执行此操作。例如。:
db.item.find( { "FieldToMatch" : "ValueToMatch" } ).count()
它只返回一个整数,这正是我想要的。但我在文档中看不到通过 C# 驱动程序执行此操作的方法。是否可以?
(应该注意的是,我们已经广泛使用查询构建器,因此理想情况下,我宁愿通过查询构建器来执行此操作,而不是开始通过驱动程序向 shell 发出命令(如果可能的话)。但如果这是唯一的解决方案,那么一个例子会很有帮助,谢谢。)
干杯,
马特
你可以这样做:
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();
一些注意事项:
- 您应该只有一个服务器实例(单例)
- 最新的驱动程序版本实际上返回长计数而不是整数
- 游标仅在迭代后获取数据
- 您可以配置很多东西,例如跳过,采取,指定在实际加载数据之前在游标中返回的字段(开始迭代)
- 游标的 Count() 方法仅加载文档计数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)