2017-04-18 85 views
0

我有一個運行nodejs和mongod的AWS實例。我試圖查詢的集合中有大約289248個文檔。Mongod在查詢數據庫時崩潰

這裏是我使用的查詢我的數據代碼:

var collection = db.collection('my_collection'); 
collection.find({ $and: [ 
     {"text" : {$regex : ".*"+keyword+".*"}}, 
     {"username" : username} 
    ] }).limit(10).toArray(function(err, docs) { 

現在本來,我在查詢只是一個用戶名collection.find({"username":username})問題,因爲在蒙戈這麼多條目。所以我開始限制我的代碼,並且在mongo控制檯中,我可以設置一個30的限制,並且它會得到我期待的結果。

但是,當我在nodejs上運行此應用程序時,當我查詢此命令時,它崩潰了我的mongod服務,我必須重新啓動它。在節點服務器上,1的限制可以正常工作,但5的限制不會。如果數據庫中有更多的結果,我不能簡單地使用1的限制。我能做什麼?

+0

你檢查了服務器日誌,看看有沒有線索嗎? –

回答

0

not using $and是否有幫助? :

collection.find({text:{$regex:".*"+keyword+".*"},username: username}) 

我還想知道'text'是否是文本索引,在這種情況下它應該是'$ text'。

我還注意到您在查詢表達式中使用了兩個變量,並且懷疑您是否已驗證這些變量是否已定義。

+0

另一個問題是,只有'collection.find({「username」:username})。limit(10)'不適用於某些查詢。 – user1883614

+0

所有的文件都在16MB以下嗎? MongoDB的版本是什麼?你可以嘗試探查器來識別和比較慢查詢:https://docs.mongodb.com/manual/tutorial/manage-the-database-profiler/ –