2012-08-09 150 views

回答

29

Javadoc of the MongoDB Java Driver,它说:

DBCursor.count():统计与查询匹配的对象的数量。这 做考虑限制/跳过。

DBCursor.size():计算匹配查询的对象数量。这 确实考虑了限制/跳过。

+0

两者似乎都是一样的......为什么他们引入了2种这样的方法?两者之间有什么性能差异? – Byter 2012-08-09 10:31:13

+0

它们不一样。考虑限制/跳过,但其他不考虑。 – 2012-08-09 10:38:32

+13

我怀疑区别在于“不采取”和“采取”限制/跳过考虑。 – 2012-08-09 10:38:32

1

不只是一个答案我想指出一个问题,我们的团队面临着“混合”这两个问题。

我们有这样的事情:

DBCursor cursor = collection.find(query).limit(batchSize); 

logger.info("{} items found.", cursor.count()); 

while (cursor.hasNext()) { 
... 
} 

原来调用cursor.count()方法之后,限为忽略(plase看看this其它问题),我们打算知道多少物品是由查询返回的,所以我们应该调用cursor.size()方法,因为调用count时确实会产生不希望的附带效果。

我希望这可以对任何人有所帮助,因为找到我们遇到的问题的根源并不那么容易。

+0

你是说'cursor.count()'不仅忽略了记录的限制,而且实际上从游标中删除了限制,比如迭代游标等后续操作的行为就好像没有设置限制一样? – 2016-06-16 23:15:29

相关问题