2013-02-11 111 views
0

我有MongoDB中的數據一樣,如何找到鍵值對特定的字符串MongoDB中

[ 

{ 
    "name":"silvester", 
    "product":"laptop,iphone,mobile,phone" 
}, 

{ 
    "name":"john", 
    "product":"cycle,bus,phone,laptop" 
}, 

{ 
    "name":"franklin", 
    "product":"cycle,phone" 
} 

] 

如何找到那臺筆記本電腦在產品密鑰。 如果這樣

{ 
"name":"XXX", 
"product":"laptop" 
} 

我可以很容易地找到使用該db.collection.find("product":"laptop");

該名稱的產品密鑰看起來那麼如何找到呢?

另外讓我知道這三個網站名稱運行使用backbone.js和node.js和mongodb技術,如www.trello.com。 對不起我的英語最差..

+2

是「產品」數組或字符串或逗號分隔的元素被釋放全文搜索索引? – randunel 2013-02-11 15:51:40

+0

下面發佈的解決方案不適合你嗎? – thtsigma 2013-02-11 16:16:21

+1

您應該將'product'作爲一串字符串存儲,因爲Mongo針對這種情況進行了優化。其他任何事情都會慢得多。 – 2013-02-11 16:28:56

回答

3

Using regex with mongodb

這爲我工作

db.collection.find({ 「產品」:/筆記本/})

更新回答

如果您想使用變量,請嘗試如下所示:

var abc = "laptop"; 
// other stuff 
userdetails.find({"product":new RegExp(abc)}).toArray(function(err,result){ 
    if (err) console.log ("error: "+err); 
    else 
    {  
    // if you want the length 
    console.log(result.length); 
    // if you actually want to see the results 
    for (var i = 0; i < result.length; i++) 
    { 
     console.log(result[i]); 
    } 
    } 
}); 

更新再來一次

var abc = "laptop"; 
// other stuff 

// note this is case sensitive. if abc = "Laptop", it will not find it 
// to make it case insensitive, you'll need to edit the RegExp constructor 
// to this: new RegExp("^"+abc+",|, "+abc+"(?!\w)", "i") 

userdetails.find({"product":new RegExp("^"+abc+",|, "+abc+"(?!\w)")}).toArray(function(err,result){ 
    if (err) console.log ("error: "+err); 
    else 
    {  
    // if you want the length 
    console.log(result.length); 
    // if you actually want to see the results 
    for (var i = 0; i < result.length; i++) 
    { 
     console.log(result[i]); 
    } 
    } 
}); 
+0

非常感謝你... – silvesterprabu 2013-02-11 16:31:57

+1

我寧願改變架構以使產品領域成爲一個字符串數組,這將使你能夠使用這個領域的索引並顯着提高你查詢的性能。就像現在的版本一樣,你將每次都瀏覽整個系列。 – vittore 2013-02-11 17:14:14

+0

我已經給出了這個動態像這樣var abc = laptop; userdetails.find({ 「產品」: 「/」 + ABC + 「/」})。指定者(功能(ERR,結果){的console.log(result.length)});但我只有零長度,所以如何動態地做到這一點? – silvesterprabu 2013-02-12 07:44:30

相關問題