2017-03-16 105 views
2

我想我錯過了什麼 - 我有大約2GB的集合,試圖找到一個特定值的文件(顯示爲一個數字或字符串)簡單而緩慢的MongoDB查詢

我有大約14K收集文件。

這是查詢,基本相當:

db.e_69.find({ 
    "field_groups.fields_data" : 
    { 
    "$elemMatch": { 
     "field_id": "502", 
     "value": {"$in": ["223384",223384]} 
    } 
}}) 

我使用MongoDB的3.2,小AWS服務器有兩個副本集。

我知道這不是很多信息 - 但因爲我是新手,我不確定需要什麼信息,並且會很樂意根據需要添加信息。對於我來說,14K文檔中的這樣一個查詢需要3秒鐘,這很奇怪。

我錯過了什麼嗎? 謝謝!

+0

您是否嘗試過使用[MongoDB解釋功能](https://docs.mongodb.com/manual/reference/explain-results/)檢查查詢?如果查詢運行速度慢,這應該是首先要做的事情。 –

回答

0

按數字排序的工作更快,但您有一個數組,因此它會減慢查詢速度,導致它有兩種類型。

我會建議添加一個簡單的布爾列,並在添加新的文檔時,如果doc有「223384」,223384,只需將此布爾列設置爲真值。 然後您的查詢將變得簡單並且快速搜索。 我希望有所幫助。

+0

謝謝YCotov,但我不確定我是否理解你的答案 - 我正在嘗試讀取數據,根據creteria檢索信息。我使用數字和字符串的原因是用戶可以同時使用...... – Yanipan

+0

這就是爲什麼在文檔上傳過程中實現附加邏輯會更好,這會檢查文檔是否具有這2個值,如果已經設置了boolen值爲true,否則爲false。 – YCotov

+0

但它可以是任何其他數字:) 我只想按價值查找文檔 - 它可以是該字段中的任何值... – Yanipan