索引未创建,$ text查询需要文本索引-mongoose [英] Index is not getting created, text index required for $text query - mongoose

查看:178
本文介绍了索引未创建,$ text查询需要文本索引-mongoose的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

mongoose: 5.8.9
node: v12.13.0

设置为在架构上创建索引之后,mongoose不会创建索引,在创建新文档之后,只有ID索引没有新创建的内容.我已经完成了创建索引所提到的文档,但仍然不知道我在哪里犯错了.

After setting up to create index on the schema, mongoose doesn't create the index, After creating a new document there is only ID index nothing newly created. I had done as the document mentioned for creating index but still I can't figure out where I'm making the mistake.

何时

 const ads = await Ad.find({ $text: { $search: "something" } })

错误

MongoError: text index required for $text query
    at Connection.<anonymous> (/home/usama/Projects/commercial/adex/node_modules/mongoose/node_modules/mongodb/lib/core/connection/pool.js:466:61)
    at Connection.emit (events.js:210:5)
    at Connection.EventEmitter.emit (domain.js:476:20)
    at processMessage (/home/usama/Projects/commercial/adex/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connection.js:384:10)
    at Socket.<anonymous> (/home/usama/Projects/commercial/adex/node_modules/mongoose/node_modules/mongodb/lib/core/connection/connection.js:553:15)
    at Socket.emit (events.js:210:5)
    at Socket.EventEmitter.emit (domain.js:476:20)
    at addChunk (_stream_readable.js:308:12)
    at readableAddChunk (_stream_readable.js:289:11)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:182:23) {
  ok: 0,
  errmsg: 'text index required for $text query',
  code: 27,
  codeName: 'IndexNotFound',
  name: 'MongoError',
  [Symbol(mongoErrorContextSymbol)]: {}
}

我的模式

import { Schema } from 'mongoose'
import mongoosePaginate from 'mongoose-paginate-v2'
import Local from '../index'

const adSchema = new Schema(
  {
    id: Schema.Types.ObjectId,
    creater: Schema.Types.ObjectId,
    title: { type: String },
    tags: Array,
    description: { type: String, maxlength: 4500, },
  },
  {
    timestamps: true,
    versionKey: false,
    autoIndex: false
  }
)

adSchema.index({ title: 'text', description: 'text', tags: 'text' })
adSchema.plugin(mongoosePaginate)

const Ad = Local.model('Ad', adSchema)

export { Ad as default }

在mongo shell上

On mongo shell

> myads.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "adex.ads"
    }
]

推荐答案

下一行:

adSchema.index({ title: 'text', description: 'text', tags: 'text' })

正确地在猫鼬 schema 上定义索引(不在数据库上).默认情况下,猫鼬会在您的应用程序启动时创建索引(链接),但是您在阻止通过使用autoIndex: false.

correctly defines an index on mongoose schema (not on a database). By default mongoose creates indexes when your application starts up (link) however you're preventing it by using autoIndex: false.

因此,您必须删除该行或在模型上明确运行createIndexes:

So you have to either remove that line or run createIndexes on your model explicitly:

adSchema.index({ title: 'text', description: 'text', tags: 'text' });
const Ad = Local.model('Ad', adSchema);
Ad.createIndexes();

这篇关于索引未创建,$ text查询需要文本索引-mongoose的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆