2012-12-21 54 views
0

我使用MongoDB。爲了測試的原因,我創建了一個數據庫(500 000 000個文檔)和一個數據庫。所有文件看起來像波紋管:Mongodb;在具有多個條件的查詢中使用索引

{ 

     "_id" : ObjectId("50c1fbcda8cf8e11c43ea8ce"), 
     "sql_id" : 8311, 
     "text" : "WD7TYIM0H H3Q 3874 000 VFBF6H", 
     "xml" : "<root> <tag_0>WD7TYIM0H</tag_0> <tag_1>H3Q</tag_1> <tag_2>3874</tag_2><tag_3>000</tag_3><tag_4>VFBF6H</tag_4></root>", 
     "tags" : [ 
       "WD7TYIM0H", 
       "H3Q", 
       "3874", 
       "000", 
       "VFBF6H" 
     ] 
} 

創建通過現場的「標籤」指數,並希望使用使用「標籤」索引多個正則表達式的條件。這可能嗎?

我想:

> db.items.find({ "$and" : [{ "tags" : /^AAA/ }, { "tags" : /^BBB/ }] }) 

> db.items.find({ "tags" : { "$all" : [/^AAA/, /^BBB/] } }) 

兩次蒙戈下去。

如果我通過一個條件搜索結果返回非常快。

謝謝!

+2

爲什麼不將兩個查詢合併爲一個正則表達式? –

+0

我想要同時檢索包含標籤AAA和BBB的所有文檔。所以我不能使用一個正則表達式作爲/^AAA/<=>/^ AAA */[guids](http://docs.mongodb.org/manual/reference/operators/#_S_regex),並且查詢顯示了文檔標籤「AAA_1」,「AAA_2」,「AAA_3」... – Alliancer

+1

原因是你有巨大的收藏(我不確定你的機器的具體情況),並且當你使用正則表達式時,即使「標籤」被索引,由於正則表達式評估的性質,它並不真正使用它。你可以在shell上做一個解釋,看看Cursor是什麼樣的。當迭代次數非常龐大時,當然需要很長時間。 – muruga

回答

0

在我的測試中,它進展順利。我使用的是db版本v1.6.5。鑑於我在DB中只有幾個文檔,這個問題可能與性能相關。

+0

MongoDB 1.6.5比較古老(2010年12月8日發佈)。絕對值得升級到最新的產品版本(目前爲2.2.x),以提高性能和併發性。 – Stennie