2013-02-14 63 views
0

我是MongoDB世界的新手,有一些基本問題。我想知道是否可以在MongoDB中使用字符串進行搜索。例如這裏是一個記錄:在MongoDB中搜索字符串

db.test.insert({S_ID:0,C_ID:1,JSON: 「{結果:[104192,42068],ID:1}」})

當我做一個找到S_ID它工作正常:

db.test.findOne({S_ID:0}) { 「_id」:物件( 「511d1675d3c6fdeb779c8ea8」), 「S_ID」 :0, 「c_id」:1, 「json」:「{result:[104192,42068],id:1}」 }

但是,如果我做一個JSON發現: 「結果」 這是行不通的

db.test.findOne({JSON: 「結果」}) 空

同時我也保證指數的JSON

db.test.ensureIndex({JSON:1})

是否可以在這樣的字符串中搜索或者我們是否需要在此之上創建SOLR或彈性搜索?

任何指針的高度讚賞

感謝 Masti

回答

0

因此,您的json密鑰的值是序列化json。如果您正在搜索包含單詞'result'的json值的文檔,則可以使用$ regex運算符。你不會指出你有多少記錄或你期望的性能,所以可能Solr/Lucene可能會過度殺傷。您還可以在最新的MongoDB版本中查看新的自由文本搜索功能。

嘗試:

db.test.find({json:/result:/i}); 

在我的機器:

> db.test.insert({ s_id:0, c_id:1, json:"{result:[104192,42068],id:1}" }) 
> db.test.find({json:/result:/i}); 
{ "_id" : ObjectId("511d21fe0ff85d1b95a5f8b1"), "s_id" : 0, "c_id" : 1, "json" : "{result:[104192,42068],id:1}" } 

順便說一句,從MongoDB的手冊:

「$正則表達式只能有效地在正則表達式中有一個使用索引開始時錨(即^字符串),並且是區分大小寫的匹配」

所以,你實際上可能要

> db.test.ensureIndex({json:1}) 
> db.test.find({json:{ $regex:'^{result:'}}).explain(); 
{ 
    "cursor" : "BtreeCursor json_1 multi", 
    "isMultiKey" : false, 
    "n" : 1, 
    "nscannedObjects" : 1, 
    "nscanned" : 1, 
    "nscannedObjectsAllPlans" : 1, 
    "nscannedAllPlans" : 1, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    "nYields" : 0, 
    "nChunkSkips" : 0, 
    "millis" : 0, 
    "indexBounds" : { 
     "json" : [ 
      [ 
       "", 
       { 

       } 
      ], 
      [ 
       /^{result:/, 
       /^{result:/ 
      ] 
     ] 
    }, 
    "server" : "Micks-MacBook-Pro-3.local:27017" 
} 
+0

注意,除了這個還有新加入的文本搜索功能。這是一個博客的鏈接發佈這個新功能後:http://blog.mongodb.org/post/40513621310/mongodb-text-search-experimental-feature-in-mongodb – ACE 2013-02-14 18:34:30

+0

因此,我的意見在我的回答的第一段:) – 2013-02-14 21:25:35

0

此鏈接涵蓋讀取操作基礎知識蒙戈相當好:http://docs.mongodb.org/manual/applications/read/

編輯:使用更復雜的查詢搜索在蒙戈沒有在大推薦數據庫。如果你經常想這樣做,可以考慮一個像索爾這樣的索引。 Mongo最好用id搜索。