【发布时间】:2015-09-16 11:01:54
【问题描述】:
Mongo C++ 驱动程序提供了一个函数来获取带有给定查询结果的游标,例如,获取 mydb 数据库的 mycol 集合中字段 x 设置为 1 的所有文档,我们可以使用以下内容(假设c 是指向正确配置的DBClientBase 对象的指针):
auto_ptr<DBClientCursor> cursor = c->query("mydb.mycol", BSON(x << 1));
此外,还有一个函数可以获取给定查询的结果数:
int n = c->count("mydb.mycol", BSON(x << 1));
在开始处理查询结果之前,我需要知道结果的数量。我知道这样做的方式是按以下方式组合这两个操作:
int n = c->count("mydb.mycol", BSON(x << 1));
// Do some checking based on n
...
auto_ptr<DBClientCursor> cursor = c->query("mydb.mycol", BSON(x << 1));
// Process cursor results
...
但是,这涉及 MongoDB 级别的 2 个操作。在查看结果之前是否可以知道游标提供的结果数量,以便我可以保存调用count() 函数?像这样的:
auto_ptr<DBClientCursor> cursor = c->query("mydb.mycol", BSON(x << 1));
int n = (get the number from the 'cursor' variable in some way)
// Do some checking based on n
...
// Process cursor results
...
【问题讨论】:
-
你确定 count() 真的在网络上做了什么吗?或者为什么要避免进行两次操作?我在 C# 中使用 MongoDB 我对 C++ 实现知之甚少。我只是好奇。
-
我想是的......好像你只运行 count() 你会得到一个有效的结果,所以从我的程序二进制文件到 MongoDB 服务器必然需要在线交互。
-
我认为查询会返回一个游标,游标应该有一个计数功能。这就是它在 C# 驱动程序中的样子。一种完全不同的方法是一个接一个地获取一个项目,为它动态分配内存,然后最后计数。我会说这取决于您的计数用例。也许你可以不用计数就可以做到?