我有一个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米的记录。
答案 0 :(得分:0)
MongoDB有助于在字段上创建文本索引,以搜索包含在属于MongoDB数据库集合的字段中的文本
根据上面提到的描述,问题集合在标题字段上有一个文本索引。
因此,要将字符串值搜索到title字段,请尝试在MongoDB shell中执行以下查找操作。
db.getCollection('posts').find({
$text: {
$search: 'test'
})
根据MongoDB的文档
$ text对索引的字段的内容执行文本搜索 文本索引。