在字符串中搜索MongoDB

时间:2013-02-14 17:06:38

标签: mongodb

我是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

2 个答案:

答案 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"
}