Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如果找不到匹配项,Mongodb查询需要的时间太长_Database_Mongodb_Indexing - Fatal编程技术网

Database 如果找不到匹配项,Mongodb查询需要的时间太长

Database 如果找不到匹配项,Mongodb查询需要的时间太长,database,mongodb,indexing,Database,Mongodb,Indexing,我有一个帖子收藏,如下面所示: { "_id" : ObjectId("5ad249121c76fb096c0081e6"), "slug" : "5ad2491261324", "title" : "title", "content" : "content here", "tags" : [ "tag1", "tag2" ], "status" : 1, "created_at" : ISODa

我有一个
帖子
收藏,如下面所示:

{
    "_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万条记录。

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

根据上述问题集合中的描述,标题字段上有一个文本索引

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

db.getCollection('posts').find({
        $text: {
            $search: 'test'
        })
根据MongoDB的文档

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


你试过db.getCollection('posts').find({title:{$regex:/test/}})@jonhid是的,我以前试过。相同的结果在这种情况下,此查询执行时间太长。创建索引的目的是加快从数据库集合获取数据的过程。根据上面的描述,集合在标题字段上定义了文本索引,上面的查询将在索引字段上执行文本搜索。