Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongoose索引已存在,具有不同的选项_Javascript_Node.js_Mongodb_Mongoose_Full Text Search - Fatal编程技术网

Javascript mongoose索引已存在,具有不同的选项

Javascript mongoose索引已存在,具有不同的选项,javascript,node.js,mongodb,mongoose,full-text-search,Javascript,Node.js,Mongodb,Mongoose,Full Text Search,我正在为我的应用程序实现搜索结果视图。 我发现mongoose内部提供了带有$text的全文搜索功能 我把下面的代码放到Post.js中 PostSchema.index({desc: 'text'}); //for example 下面是我放在路由文件route/posts.js中的代码 Post.find({$text: {$search : 'please work!'}}).exec(function (err, posts) {...}) 下面是我遇到的错误消息 Index wi

我正在为我的应用程序实现搜索结果视图。 我发现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
});

非常感谢您的清晰快速的解决方案。现在可以了!在我的例子中,我更改了一个列名,所以我必须删除并重新创建。当然,如果其中一个列是定义索引的列,那么需要重新创建索引。