通过Async.js对MongoDB进行并行查询

时间:2015-04-21 13:53:45

标签: node.js mongodb mongoose async.js

已经解决了

我在项目中使用MEAN堆栈。一切都很好。但我通过Mongoose.js和Async.js对MongoDB的并行查询存在一些问题。 如果我使用系列方法,那么一切都好。

async.map documents, (document, __cb) ->
   async.waterfall [
      (cb) ->
         # some action
         console.log 'first func', first++
         cb err
    ,
      (cb) ->
         db.models.Tags.findOne docId: document.id, (err, tag)->
            document.tag = tag # an example
            console.log 'second func', second++
            cb err
    ], (err) ->
       console.log 'result func', result++
       __cb err, document
, (err, documents) ->
  #have all documents with tags

如果我有大约130个项目的文件数组,那么我会看到

first func 121
second func 121
result func 121

first func 122
second func 122
result func 122

first func 123
second func 123
result func 123

first func 124
first func 125
second func 124
result func 124
second func 125
result func 125

first func 126
second func 126
result func 126

first func 127
first func 128
first func 129
first func 130
first func 131
first func 132
first func 133
first func 134
first func 135
second func 127
result func 127
first func 136
first func 137
first func 138
first func 139
first func 140
first func 141
first func 142
first func 143
first func 144
first func 145
first func 146
second func 128
result func 128
first func 147
first func 148
first func 149
first func 150
second func 129
result func 129

/home/project/some/project/some/node_modules/mongoose/lib/utils.js:419
    throw err;
          ^
Error: Callback was already called.
at          /home/project/some/project/some/node_modules/async/lib/async.js:22:31

可能是Mongoose有同步查询的限制吗?还是蒙哥?我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我已经解决了。问题不在MongoDB中。在#some动作中,我向其他服务器请求了。模块http(Node.js)默认只打开5个套接字用于连接。我增加了这个数字,一切都很好。

相关问题