我有一個非常大的集合(超過800k),我需要實現基於標籤的自動完成(基於單詞開頭)功能的查詢。我的文件是這樣的:mongodb快速標籤查詢
{
"_id": "theid",
"somefield": "some value",
"tags": [
{
"name": "abc tag1",
"vote": 5
},
{
"name": "hij tag2",
"vote": 22
},
{
"name": "abc tag3",
"vote": 5
},
{
"name": "hij tag4",
"vote": 77
}
]
}
舉例來說,如果我的查詢將是與「AB」開頭,並有一個「somefield」,即「一些價值」的結果將是「ABC標籤1」的標籤, 「abc tag3」(僅限名稱)。 我關心查詢的速度遠遠超過插入和更新的速度。
我認爲聚合框架將會是正確的方式,但是對於非常快速的查詢,最好的管道和索引是什麼?
這些文檔不是'標籤'文檔,它們是代表客戶端對象的文檔,它們包含更多的數據字段,爲了簡單起見我省略了每個客戶端有幾個標籤和另一個字段(我更改了它的名稱,所以它不會是與標籤數組混淆)。我需要獲得一組沒有一組客戶端所有標籤的重複內容。
我曾嘗試做類似的去年,但數據庫更小。隨着數據量的增長,我最終不得不使用Solr。 – Martin 2014-09-29 18:43:23
你可以發佈你試過的查詢和索引嗎?你使用聚合框架嗎? – jacob 2014-09-29 19:28:15
對不起,代碼已經過去了,但它是基於標記字段上的正則表達式。它預先聚合框架,但我不知道這將是最好的方法。根據我的經驗,聚合框架喜歡將整個文檔讀入內存,即使$匹配只能使用索引 – Martin 2014-09-30 08:47:35