2016-08-17 32 views
1

在mongo db中有標籤。我試圖從搜索詞的開頭拉出所有可以匹配的標籤。是否有可能在mongo查詢中實現以下內容?如何查詢mongo db以返回搜索詞中所有鍵的組合?

蒙戈數據:

[ 
    { tag: '123' }, 
    { tag: '1234' }, 
    { tag: '123456' }, 
    { tag: '987' }, 
    { tag: '555' } 
] 

查詢搜索術語= '12349339'

結果期望:

[ 
    { tag: '123'}, 
    { tag: '1234' } 
] 

[ 
    { tag: '1234' } 
] 

我試過正則表達式無濟於事,因爲使用(^)只會有用,如果更長的搜索詞是在數據庫中,我正在使用子字符串進行搜索。

更新:這是我嘗試這種方法的任何人的正則表達式嘗試。

tags.find({標籤:{$正則表達式: '^ * 12349339'}})

返回任何內容。如果我想要所有匹配'123'的標籤,那麼這種查詢就可以工作。

tags.find({標籤:{$正則表達式: '^ 123'}})

返回:

[ 
    { tag: '123' }, 
    { tag: '1234' }, 
    { tag: '123456' } 
] 

但我想要的相反。所以,我想我需要一個聚合函數或其他東西。

+0

嗨富 - 你能描述一下你到目前爲止嘗試過的查詢以及他們給出的結果嗎? –

+0

我試過使用像{$ regex:'^ 12349339'}這樣的正則表達式組合,但是這些是爲了我想要的。威克的答案很有希望。 –

+0

如果你有額外的信息要添加回應評論,例如,你應該通過編輯問題來改善你的問題,以包括額外的信息。 –

回答

0

你可以這樣做:

{ 
    $where: "'12349339'.indexOf(this.tag) == 0" 
} 

強制性性能關於使用$其中:其中,提供了更大的靈活性,但需要數據庫處理JavaScript表達式或函數的集合中的每個文件的$。 https://docs.mongodb.com/manual/reference/operator/query/where/

+0

不錯,這個作品。我會看看如果我可以削減結果設置$在哪裏搜索加快。謝謝。 –