2013-07-29 13 views
2

有以下數據:如何在數據庫中搜索本身是MongoDB中搜索字符串的子鍵

>db.abc.insert([{_id:"r"},{_id:"ro"},{_id:"roo"},{_id:"root"},{_id:"rob"}]); 

已經知道了關鍵字「根」,需要找到「_id」內容「R ,RO,袋鼠,根」的記錄,我已經試過:

>db.abc.find({_id:{$lte:"root"}}); 
{ "_id" : "r" } 
{ "_id" : "ro" } 
{ "_id" : "rob" } 
{ "_id" : "roo" } 
{ "_id" : "root" } 

我並不需要 「搶」,相當於一個PL/SQL語句:

'root' like _id||'%' 

關鍵詞可能很長。有什麼好方法,最好是使用索引。

回答

0

如果你有root作爲輸入,那麼你就需要自己創建一個包含所有可能的搜索查詢,通過使用$in

db.collection.find({ _id: { $in: [ 'r', 'ro', 'roo', 'root' ] } }); 

當前沒有可用的功能,只搜索零件的一個靜態值。

其他的方式是可能的 - 如果你有「RO」,那麼你可以很容易地通過使用像一個正則表達式查找所有_id值與「RO」開始:

db.collection.find({ _id: /^ro/ }); 

另一種可能替代的使用text全文搜索索引。這將允許你匹配的字。然後搜索root也將找到roots文本搜索描述在http://docs.mongodb.org/manual/core/text-search/

+0

我實際上是一個樹形結構,每個節點都有一個關鍵字。找到所有具有前綴匹配的子節點,然後找到所有父節點,都遇到了這個問題。關鍵字不一定是每個級別增加的字符,因此構建所有可能的值,它會產生大量的不活動關鍵字。我嘗試使用$ where:return substring('root',1,this._id.length)== this._id',但返回[ReferenceError:子字符串未定義] – llx

+0

當然,這些解決方案都不是「理想的「這可能是一個很好的功能添加到MongoDB,絕對值得JIRA我認爲 – Sammaye

+0

@llx這將是一個可怕的查詢,但JavaScript的子字符串是''root'.substring(1,this._id.length)' – Sammaye