Node.js Mongo节点JS在第二个AWS ECS实例上的行为有所不同

Node.js Mongo节点JS在第二个AWS ECS实例上的行为有所不同,node.js,mongodb,amazon-web-services,amazon-ec2,Node.js,Mongodb,Amazon Web Services,Amazon Ec2,我有一个NodeJS服务器和MongoDB,运行在AWSEC2实例上。我复制了这个实例并启动了另一个实例,但是代码的行为现在不同了。我所指的行为如下:我正在使用NodeJS异步库,我有以下代码段: async.waterfall([ function(cb) { db.collection.remove(query, cb); }, function(result, cb) { func_foo(result, cb); }, ... 在新实例中,我在func_foo中得到一个

我有一个NodeJS服务器和MongoDB,运行在AWSEC2实例上。我复制了这个实例并启动了另一个实例,但是代码的行为现在不同了。我所指的行为如下:我正在使用NodeJS异步库,我有以下代码段:

async.waterfall([
function(cb) {
    db.collection.remove(query, cb);
},
function(result, cb) {
    func_foo(result, cb);
},
...
在新实例中,我在func_foo中得到一个错误,指出“cb”不是回调函数。上述代码在第一台基于linux的EC2实例和一台基于Win7的专用Node/Mongo机器上运行良好。在进一步挖掘之后,我发现,由于某种原因,db.collecton.remove返回2个参数,而不是像在其他机器上一样返回1个参数,所以现在,“cb”是第二个参数,它不是函数;这就是错误

我总是可以将functionresult、cb修改为functionresult1、result2、cb类型代码,然后在内部检查result2是否是函数,如果是,则将其用作回调。但是我担心我在其他地方可能会遇到类似的问题,我真的不想更改在其他机器上工作的代码

所以,我的第一个问题是:在启动时是否有任何标志/启用mongo,这可能会导致db.collection.remove调用的不同行为。我使用以下命令启动mongo守护进程:“sudo/usr/bin/mongod-f/etc/mongod.conf”。我不记得我是如何在6个多月前的第一个EC2实例上启动它的。但是两个实例上的mongod.conf文件是相同的,因为第二个实例是第一个实例的复制副本

第二个问题更一般:处理有时返回一个参数有时返回两个参数的函数的最佳方法是什么。我在MongoDB NodeJS驱动程序中遇到过这种现象。除了查看源代码外,如何判断函数将返回多少个参数。文档只提到一个参数

谢谢,,
Gary

在翻阅了NodeJS Mongo驱动程序和Mongo在线文档之后,我发现了问题所在,并希望与其他人分享

Mongo处理插入/更新/删除操作的方式从2.4.x版更改为2.6.x版。在我原来的EC实例上,我一直在运行2.4.x版本,新实例更新为2.6.x版本

例如,在2.4.x版本中,delete命令将返回已删除的项目数。如果用户想要检查错误,可以调用getLastError命令。在2.6.x版本中,delete命令返回已删除的项目数和getLastError命令的输出。净效果是,现在delete命令返回2个值,而不是2.4.x版中的一个值

我原来的EC2实例已将Mongo更新为2.6.x,但服务器尚未重新启动,因此它仍在运行2.4.x

我现在需要决定是加载2.4.x版本还是重写代码以支持2.6.x的新需求