2014-09-23 93 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