在mongodb中搜索文本中的文档值

时间:2014-05-11 15:53:35

标签: mongodb mongodb-query

我需要找到文本/字符串中的所有文档值:

示例:

想象一下,我有标签集合,其中包含以下文档:

db.tag.find()
{ "_id" : ObjectId("536f7107c55b2acc61000bc8"), "name" : "star" }
{ "_id" : ObjectId("536f710fc55b2acc61000bc9"), "name" : "star wars" }
{ "_id" : ObjectId("536f7117c55b2acc61000bca"), "name" : "spider" }
{ "_id" : ObjectId("537087d16ac5b5f6f58f0b1b"), "name" : "starting" }

我需要这样的东西(mongodb shell中的例子):

db.tag.find({"name": { $subStrOF: "star wars episode VII" }})

returning this:

{ "_id" : ObjectId("536f7107c55b2acc61000bc8"), "name" : "star" }
{ "_id" : ObjectId("536f710fc55b2acc61000bc9"), "name" : "star wars" }

有什么想法吗?

非常感谢

2 个答案:

答案 0 :(得分:0)

首先,使用命令行选项启动mongod进程

--setParameter textSearchEnabled=true

示例:

mongod --setParameter textSearchEnabled=true

然后在你的mongo shell中,为标签集合中的name创建一个索引

db.tag.ensureIndex({name : "text"});

现在您可以使用文本进行查询:

db.tag.runCommand("text", {search : "star wars episode"});

这将返回类似这样的内容

{
        "queryDebugString" : "star||||||",
        "language" : "english",
        "results" : [
                {
                        "score" : 1.1,
                        "obj" : {
                                "_id" : ObjectId("536f7107c55b2acc61000bc8"),
                                "name" : "star"
                        }
                },
                {
                        "score" : 0.75,
                        "obj" : {
                                "_id" : ObjectId("536f710fc55b2acc61000bc9"),
                                "name" : "star wars"
                        }
                }
        ],
        "stats" : {
                "nscanned" : 2,
                "nscannedObjects" : 0,
                "n" : 2,
                "nfound" : 2,
                "timeMicros" : 152
        },
        "ok" : 1
}

仅获得结果:

db.tag.runCommand("text", {search : "star wars episode"}).results

我已经使用我的本地数据库进行了测试,它运行正常。请检查

有关文字的详细信息: Mongo DOCs

来自mongoDB 2.6的BTW:DOCS

db.tag.find({$text : {$search : "star wars episode VII"}});

答案 1 :(得分:0)

我使用$ where工作,例如:

命令:

db.tag.find({$where:"'star wars episode VII'.search("star") >= 0"})

输出:

{ "_id" : ObjectId("536f7107c55b2acc61000bc8"), "name" : "star" }
{ "_id" : ObjectId("536f710fc55b2acc61000bc9"), "name" : "star wars" }

希望有所帮助