我是MongoDB世界的新手并且有一些基本问题。我想知道是否可以在MongoDB中搜索字符串。例如,这是一条记录:
db.test.insert({s_id:0,c_id:1,json:“{result:[104192,42068],id:1}”})
当我在s_id上找到它时,它运行正常:
db.test.findOne({S_ID:0}) { “_id”:ObjectId(“511d1675d3c6fdeb779c8ea8”), “s_id”:0, “c_id”:1, “json”:“{result:[104192,42068],id:1}” }
但是,如果我在json上查找:“结果”它不起作用
db.test.findOne({json:“result”}) 空
同时我确保了json上的索引
db.test.ensureIndex({JSON:1})
是否可以对此类字符串进行搜索,或者我们是否需要在此基础上创建SOLR或弹性搜索?
任何指针都非常受欢迎
由于 Masti
答案 0 :(得分:0)
此链接涵盖了Mongo中的读操作基础知识:http://docs.mongodb.org/manual/applications/read/
编辑:不建议在大型数据库中使用更复杂的查询在Mongo中进行搜索。如果您经常这样做,请考虑像solr这样的索引。 Mongo最好使用id。
进行搜索答案 1 :(得分: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手册:
“$ regex只能在正则表达式具有字符串开头(即^)的锚点时有效地使用索引,并且是区分大小写的匹配”
所以你实际上可能想要
> 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"
}