mongodb获取字符串中的所有键

时间:2015-07-05 21:31:29

标签: mongodb

如果我存储了一些像

这样的数据,是否可以搜索字符串

姓名:

{
    name: 'john'
},
{
    name: 'pete'
},
{
    name: 'jack smith'
}

然后我执行类似

的查询
{ $stringContainsKeys: 'pete said hi to jack smith' }

它会返回

{
    name: 'pete'
},
{
    name: 'jack smith'
}

我不确定这在mongoDB中是否可行,或者这种搜索是否具有特定名称。

2 个答案:

答案 0 :(得分:2)

是的,很可能通过使用 $text 运算符来执行文本搜索,该文本搜索使用 text index索引的字段

假设您有以下测试文档:

db.collection.insert([
    {
        _id: 1, name: 'john'
    },
    {
        _id: 2, name: 'pete'
    },
    {
        _id: 3, name: 'jack smith'
    }
])

首先,您需要在文档的name字段上创建文本索引:

db.collection.createIndex( { "name": "text" } )

然后对搜索字符串的每个术语执行逻辑OR搜索,该搜索字符串以空格分隔并返回包含任何术语的文档

以下查询搜索指定了一个由空格分隔的六个术语的 $search 字符串," pete对插孔史密斯说":

db.collection.find( { "$text": { "$search": "pete said hi to jack smith" } } )

此查询返回包含 pete 表示 hi jack的文档索引name字段中的 smith

/* 0 */
{
    "_id" : 3,
    "name" : "jack smith"
}

/* 1 */
{
    "_id" : 2,
    "name" : "pete"
}

答案 1 :(得分:0)

从Mongodb 2.6开始,您可以搜索mongodb集合以匹配任何搜索字词。

 db.names.find( { $text: { $search: "pete said hi to jack smith" } } )

这将搜索由空格分隔的每个术语。 你可以在这里找到更多相关信息 http://docs.mongodb.org/manual/reference/operator/query/text/#match-any-of-the-search-terms

但是,它仅适用于个别条款。如果您必须搜索不是单个术语的精确短语,例如你想找到"杰克史密斯'但不是"史密斯杰克",它将无法工作,所以你将不得不使用搜索短语。 http://docs.mongodb.org/manual/reference/operator/query/text/#search-for-a-phrase,用于搜索文本中的确切短语。

如果您的应用程序需要更高级的基于文本的搜索功能,可以考虑使用类似Elasticsearch https://www.elastic.co/guide/en/elasticsearch/reference/1.3/query-dsl-mlt-field-query.html的内容。

卓然