mongo的聚合语句在某些server和shell版本不匹配时会报错

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服务器要测试聚合语句,只能在那台服务器上测试了!

你可能感兴趣的:(mongo的聚合语句在某些server和shell版本不匹配时会报错)