如果找不到匹配项,Mongodb查询会花费太长时间

时间:2018-04-15 17:16:47

标签: database mongodb indexing

我有一个posts集合,如下:

{
    "_id" : ObjectId("5ad249121c76fb096c0081e6"),
    "slug" : "5ad2491261324",
    "title" : "title",
    "content" : "content here",
    "tags" : [ 
        "tag1", 
        "tag2"
    ],
    "status" : 1,
    "created_at" : ISODate("2018-04-12T07:23:07.000Z"),
    "user_id" : ObjectId("5ad249111c76fb096c007dfd"),
    "url_id" : ObjectId("5ad249121c76fb096c0081e7"),
    "updated_at" : ISODate("2018-04-14T18:31:46.000Z"),
    "images" : [ 
        {
            "extension" : "jpg",
            "path" : "/medias/tests/4.jpg",
            "thumbnail" : "/medias/tests/4-th.jpg",
            "updated_at" : ISODate("2018-04-14T18:31:46.000Z"),
            "created_at" : ISODate("2018-04-14T18:31:46.000Z"),
            "_id" : ObjectId("5ad249121c76fb096c0081e8")
        }
    ]
}

该集合在标题上有文本索引。

当我执行以下查询时:

db.getCollection('posts').find({title: /test/})   

如果至少有一个匹配项,则查询执行速度非常快。但是当它没有匹配时,执行时间太长。

为什么会这样?

修改

我在这个系列中有100米的记录。

1 个答案:

答案 0 :(得分:0)

MongoDB有助于在字段上创建文本索引,以搜索包含在属于MongoDB数据库集合的字段中的文本

根据上面提到的描述,问题集合在标题字段上有一个文本索引。

因此,要将字符串值搜索到title字段,请尝试在MongoDB shell中执行以下查找操作。

db.getCollection('posts').find({
        $text: {
            $search: 'test'
        })

根据MongoDB的文档

  

$ text对索引的字段的内容执行文本搜索   文本索引。