因此,您的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"
}
注意,除了這個還有新加入的文本搜索功能。這是一個博客的鏈接發佈這個新功能後:http://blog.mongodb.org/post/40513621310/mongodb-text-search-experimental-feature-in-mongodb – ACE 2013-02-14 18:34:30
因此,我的意見在我的回答的第一段:) – 2013-02-14 21:25:35