MongoError:$ text查询需要文本索引

时间:2020-07-29 16:41:02

标签: node.js mongodb mongoose mongoose-schema

我正在获取$ text查询所需的文本索引,就像我在使用该架构之前已经做过索引一样。有人可以告诉我这可能是什么问题吗?还有一个问题,我们需要在mongodb中删除表以创建索引吗?如果是的话,我将失去当前数据。如何在不删除表的情况下建立索引?

const mongoose = require('mongoose');

let UserSchema = new mongoose.Schema({
    email: String,
    title: String,
});

UserSchema.indexes({ email: 'text', title: 'text' });

run().catch((err) => console.log(err));

async function run() {
    await mongoose.connect('mongodb://localhost:27017/test', {
        useNewUrlParser: true,
        useUnifiedTopology: true,
    });
    await mongoose.connection.dropDatabase();

    const UserModel = mongoose.model('user', UserSchema);
    await UserModel.createIndexes();
    const newUser = [
        { email: 'test@test.com', title: 'r' },
        { email: 't@gmail.com', title: '@ro' },
    ];
    const user = await UserModel.create(newUser);
    console.log(user, 'user');
    const index = await UserModel.listIndexes();
    console.log(index);
    const data = await UserModel.find({ $text: { $search: 'test' } }).exec();
    console.log(data);
}

1 个答案:

答案 0 :(得分:2)

函数UserSchema.indexes返回在架构上定义的当前索引。您想要UserSchema.index定义一个新索引。