javascript - Mongoose 索引已经存在,有不同的选项

标签 javascript node.js mongodb mongoose full-text-search

我正在为我的应用实现搜索结果 View 。 我发现 mongoose 内部提供了带有 $text 的全文搜索功能。

我把下面的代码放到Post.js

PostSchema.index({desc: 'text'}); //for example

这是我放在路由文件 route/posts.js 中的代码

Post.find({$text: {$search : 'please work!'}}).exec(function (err, posts) {...}) 

我想出的错误信息如下

Index with pattern: { _fts: "text", _ftsx: 1 } already exists with different options

有没有人知道如何处理这个错误并弄清楚? 谢谢你。

最佳答案

检查在哪个字段上定义了文本索引。现在 mongodb 只允许每个集合有一个文本索引。因此,如果您在 desc 列上定义了文本索引并尝试在其他一些列上使用该索引,您一定会遇到此错误。

您能否尝试查询您的索引并查看您在哪一列上创建了它。要获取索引,您可以这样做

db.collection.getIndexes()

它会返回这样的东西

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "some.ns"
    },
    {
        "v" : 1,
        "key" : {
            "_fts" : "text",
            "_ftsx" : 1
        },
        "name" : "desc_text",
        "ns" : "some.ns",
        "weights" : {
            "title" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 2
    }
]

现在如果你想在其他列中也使用这个索引,只需删除这个索引

db.collection.dropIndex('desc_text');

然后通过包含您希望被文本索引覆盖的所有列来重新创建它,

db.collection.createIndex({
    title:'text;,
    body: 'text;,
    desc: 'text',
    ...... and so on
});

关于javascript - Mongoose 索引已经存在,有不同的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150675/

相关文章:

javascript - Django - 如何使日期选择器在更改时提交表单

Javascript:分段时间

javascript - 我们如何访问 PhantomJS 下载的文件?

MongoDB 2.4 副本集授权

mongodb - Mongo 比较并导入缺失数据

mongodb 按多个字段查找分组

javascript - 谷歌地图 - 不知道为什么我总是得到第一个信息窗口

javascript - 如何从嵌套的json数据中获取csv

node.js - sudo npm 失败,env : node: No such file or directory

javascript - 使用 cron 调度任务后,如果服务器崩溃会发生什么