mike at eastghost dot com ¶6 年前
PHP '用户空间' / 高级驱动程序就在这里 -- [url]https://github.com/mongodb/mongo-php-driver[/url]
在新的驱动程序中,这些将失败
(A) $count = $collection->find( $criteria )->count();
(B1) $cursor = $collection->find( $criteria );
(B2) $count = $cursor->count();
在新的驱动程序中,结果计数已成为一个独立的操作,应用于集合,而不是游标
$count = $collection->count( $criteria );
$cursor = $collection->find( $criteria );
来自 jmikola 2016 年 1 月 6 日 ([url]https://github.com/mongodb/mongo-php-driver/issues/195 在这里[/url])
"在新的驱动程序中,Cursor 对象现在表示执行的命令或查询的实际结果,而在旧的驱动程序中,游标具有双重性质(执行前或执行后)。旧的 MongoCursor::count() 方法实际上使用相同的条件调用了一个计数命令;但是,这意味着计数命令的计算可能与实际查询结果不同,因为它们不一定在相同的结果数据上操作。
"用户空间库在集合上实现了一个 count() 方法,它也接受过滤器条件,我们更希望鼓励这样做,以便用户了解这些操作是分开的。如果我们最终在用户空间库中使 Cursor 可计数,我们将使用 iterator_count() 在结果上提供精确的计数;但是,这还需要我们缓存结果,以便用户可以重新卷起游标并再次迭代(最近在 PHPLIB-81 中讨论了这一点)。虽然旧的驱动程序在重新卷起时会重新执行查询,但这也不是新的驱动程序中 Cursor 的性质所允许的。
"我知道这可能看起来很不方便,但我相信显式 API 终究是比旧的驱动程序向前迈进了一步,在旧的驱动程序中,许多用户可能不知道幕后到底发生了什么。如果您有任何其他问题,请随时跟进。