2016-05-30 60 views
0

我正在嘗試使用特定屬性(向我提供註冊到服務中的所有用戶)查詢一大組用戶。預計該數字將超過10,000。但是每個用戶對象都很龐大。在下面的函數中,我能夠將'到達此處'記錄到cmd行,顯示該函數至少被調用,但我無法訪問allUsers,字符串'all users length'甚至沒有記錄到cmd行。我的猜測可能是貓鼬對大量數據有讀取超時。用戶是貓鼬收藏。請任何人可能有一個想法是什麼或有更好的方式來查詢大量的數據,所有的建議歡迎。由於如何在Mongoosejs中查詢大量數據集

function get_userIds_ready_for_fulfillment(Users) { 
    logger.info('reached here'); 
    Users.find({ "isEnrolled": true }, (error, allUsers) => { 
    if (error) { 
     return logger.error('Fullfiment_job_Error', 'error querying all users'); 
    } 
    logger.info('all users length', allUsers.length); 
}); 
} 
+0

你有在球場上'isEnrolled'的指數? – maxdec

+0

@maxdec不,我不這樣做,是一個問題? – user3137376

+0

好吧,它取決於你的集合的大小,但在該字段上添加一個索引將使查詢更快,並且可以解決你的「超時」問題,如果這是發生了什麼。 – maxdec

回答

2

你可以考慮

  • 使用投影限制領域的返回,從而縮小結果集。一種方法是:Users.find({"isEnrolled": true}).select({myField: 1}).exec((err, allUsers) => { ... })Docs
  • 使用流/光標。例如,可以直接在node.js中將結果集流式傳輸到客戶端。 Docs
  • 通過skiplimit進行數據分頁。跳過是數據庫中昂貴的操作(討論here),但比現在好。如果在分頁時插入某些內容,也可以通過這種方法省略數據。
  • 使用任何聚合運算符。 Docs。 (count也有點聚合運營商沒有在該節中列出。)