2015-12-14 60 views
3

我已阅读MongoDB Wire Protocol并执行我自己的驱动程序。在原始MongoDB协议上实现“count”方法的正确方法是什么?

我试图实现“count”方法,它返回符合条件的文档数量。 但是在上面的手册中,我找不到适合计数方法的操作码。

可能通过执行OP_QUERY获取所有需要的文档并将它们计入驱动程序代码中。但它看起来效率很低(文档中不必要的内容将在网络上发送)。

我可以通过其他方式有效实施“计数”方法吗?

回答

0

我创建了mongo-proxy脚本,它代理了MongoDB协议并在MongoDB服务器和标准mongo客户端程序之间运行它。

作为结果,我确认请求消息发送如下。

命令:

> use test-db 
> db.TestCollection.find({'a': 1}).count() 
3 

消息:

===== client -> server ===== 
type: OP_QUERY 
full_collection_name: test-db.$cmd 
query: {'count': 'TestCollection', 'query': {'a': 1.0}, 'fields': {}} 

===== server -> client ===== 
{'n': 3.0, 'ok': 1.0} 

我能得到从测试分贝计数值$ CMD集合。 :-)

相关问题