2014-09-23 79 views
2

我试图建立使用猫鼬和的NodeJS一个简单的关键词全文检索,这是迄今为止代码:猫鼬,的NodeJS,全文搜索

var db = mongoose.createConnection('localhost', config.mongoDbName) 
    , ContSchema = Schema({ 
     'idUser': String, 
     'title': String, 
     'category': String, 
     'slug': String, 
     'description': String 
     }) 
     .index({ 
     'title':'text', 
     'description':'text' 
    }) 
, ContModel = db.model('Cont', ContSchema); 

db.on('error', function (err) { 

     console.error.bind(console, 'Mongoose connection error:' + err); 
    }); 
    db.once('open', function() { 

     process.stdout.write('Connection to mongodb db done...'); 
    }); 

话,我搜索查询:

var getAllBy = function (limit, offset, keywords) { 

     var sort 
     , find 
     , findScore; 

     if (!!keywords) { 

     find = {'$text':{'$search':keywords}}; 
     findScore = {'score':{'$meta':'textMatchScore'}}; 
     sort = {'score':{'$meta':'textMatchScore'}}; 

     } else { 

     sort = {'_id':'desc'}; 
     } 

     return new RSVP.Promise(function (resolve, reject) { 

     ContModel.find(find, findScore).limit(limit).skip(offset).sort(sort).exec(function (err, data) { 

      if (err){ 

      reject(err); 
      } else { 

      resolve(data); 
      } 
     }); 
     }); 
} 

它不工作,它在控制台返回此错误:MongoError:无法规范化查询:坏的badValue排序规范

我其实不能到f用这个来解决真正的问题,你能帮我解决吗?

谢谢

+0

您正在使用什么版本的MongoDB?此处使用的文本搜索语法仅适用于2.6发行版 – 2014-09-23 08:08:31

+0

@Neil Lunn MongoDB shell版本:2.6.4 – sbaaaang 2014-09-23 08:13:33

+0

仅供参考您可以使用较新的shell并连接到较旧的服务器。所以这真的是我所问的“服务器版本”。 – 2014-09-23 08:20:02

回答

2

您的关键字是不正确的位置,看到$meta操作下正确的语法,目前只有“textScore”:

find = {'$text':{'$search':keywords}}; 
    findScore = {'score':{'$meta':'textScore'}}; 
    sort = {'score': {'$meta':'textScore'} } 
+0

似乎有些事情正在继续,谢谢,但现在看到我得到这个:** MongoError:无法canonicalize查询:BadValue不支持$ meta操作符:textMatchScore ** – sbaaaang 2014-09-23 08:21:14

+0

@sbaaaang所以就像我说的,检查服务器版本'db .serverStatus()。版本'会做到这一点。但我主要看到你没有改变任何东西。 $ meta关键字是“textScore”而不是“textMatchScore” – 2014-09-23 08:26:11

+0

是啊对不起没有注意到这种变化,我复制粘贴你的完整代码同样的错误出现 – sbaaaang 2014-09-23 08:30:08