大集合时出现Mongoose错误

时间:2015-11-07 21:56:54

标签: mongodb mongoose mongodb-query

我试图通过mongoose访问一个包含超过一百万个文档(1281034)的集合,但没有成功。

我试过这三种方式:

正常访问整个集合

@find({},'_id n').exec (error, value) ->
  

Mongoose:items.find({}){fields:{n:1,_id:1}}

有限制,这可行,但99999(允许的最大值)限制其不够

@find({},'_id n').limit(99999).exec (error, value) ->
  

Mongoose:items.find({}){limit:99999,fields:{n:1,_id:1}}

使用流,这也可以,但会出现内存不足错误

stream = @find({},'_id n').stream()
stream.on('data', (doc)->
     results.push doc
     console.log "#{results.length}"
    ).on('close', ->
      console.log "Finished : #{results.length}"
    )

在415786文件中崩溃:(致命错误:CALL_AND_RETRY_LAST分配失败 - 处理内存不足)

1 个答案:

答案 0 :(得分:0)

最后我的解决方案是避免在查询结果中存储数百万个项目。我发现最好的方法是使用NodeJS流,所以我不需要使用大量内存。

stream = @find({}).stream()
stream.on('data', (doc)->
 Redis.push('items',JSON.stringify(doc))
)

如果您想要一种更具可读性的方式,您还可以将.pipe()方法链接起来并将其传递给writeableStream