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是的,我以前试过。相同的结果在这种情况下,此查询执行时间太长。创建索引的目的是加快从数据库集合获取数据的过程。根据上面的描述,集合在标题字段上定义了文本索引,上面的查询将在索引字段上执行文本搜索。