1. 查看当前服务器的mongo版本信息
2001 $ dpkg -l|grep mongo
ii mongodb 1:2.4.9-1ubuntu2 amd64 object/document-oriented database (metapackage)
ii mongodb-clients 1:2.4.9-1ubuntu2 amd64 object/document-oriented database (client apps)
ii mongodb-dev 1:2.4.9-1ubuntu2 amd64 object/document-oriented database (development)
ii mongodb-server 1:2.4.9-1ubuntu2 amd64 object/document-oriented database (server package)
2. 本地连接mongo服务器,mongo shell运行聚合语句结果报错
> db.imp_20170503.aggregate([{$group : {_id : "$idfa", total : {$sum : 1}}}])
2017-07-07T10:47:11.952+0800 E QUERY [thread1] TypeError: cmd.cursor is undefined :
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1322:1
@(shell):1:1
3. 在远程mongo服务器上,直接mongo shell运行:
> db.imp_20170503.aggregate([{$group : {_id : "$idfa", total : {$sum : 1}}}])
{ "result" : [ { "_id" : "idfa", "total" : 11 } ], "ok" : 1 }
4. 发现被坑爹了! 远程服务器上可以 : MongoDB shell version: 2.4.9
本地shell不行 :
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 2.4.9
WARNING: shell and server versions do not match
5. 上述显示的"connecting to: mongodb://127.0.0.1:27017"是因为ssh做的端口转发到本地了。
6. 上述实践证明,不是mongo版本低导致的。是server和mongo shell版本不匹配导致聚合执行出错!
7. 奇葩的是,我在本地连接另一个版本的mongo服务器3.2.14(在yunip上),版本也是不匹配的,但是执行完好:
mongo --port 37017
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:37017/
MongoDB server version: 3.2.14
WARNING: shell and server versions do not match
> db.imp_20170503.aggregate([{$group : {_id : "$idfa", total : {$sum : 1}}}])
{ "_id" : "idfa", "total" : 11 }
-------------------------------------------------------------------------------------
yunip服务器上的信息如下,也将端口转发到本地37017了。
2001 $ dpkg -l|grep mongo
ii mongodb-org 3.2.14 amd64 MongoDB open source document-oriented database system (metapackage)
ii mongodb-org-mongos 3.2.14 amd64 MongoDB sharded cluster query router
ii mongodb-org-server 3.2.14 amd64 MongoDB database server
ii mongodb-org-shell 3.2.14 amd64 MongoDB shell client
ii mongodb-org-tools 3.2.14 amd64 MongoDB tools
rc mongodb-server 1:2.4.9-1ubuntu2 amd64 object/document-oriented database (server package)
-------------------------------------------------------------------------------------
8. 真不能简单说是mongo server和shell版本不匹配导致的,但至少有关系。只是生产中的mongo服务器要测试聚合语句,只能在那台服务器上测试了!