2017-04-27 36 views
-1

我正在嘗試使用節點js.my結果數組的mongo數據庫中的搜索功能始終爲空。我在這裏分享我的代碼。有人幫我找到最新的錯誤。 搜索後,我得到我的控制檯中的空數組[]。使用Nodejs獲取mongo db中的過濾器/搜索文本的空數組

型號/ contact.js

var mongoose = require('mongoose'); 
var ContactSchema = new mongoose.Schema({ 
cid: String, 
name: {type: String, index: true}, 
phon: Number, 
contactwith: {type: String, index: true} 
}); 
module.exports = mongoose.model('Contact', ContactSchema); 


    mongoose.model('Contact', ContactSchema).ensureIndexes(function(err) { 
     if (err) 
      console.log(err); 
     else 
      console.log('create contact index successfully'); 
    }); 

控制器/ contact.js

var mongoose = require('mongoose'); 
var Contact = mongoose.model('Contact'); 

    var ContactController = function(app,mongoose){ 
    app.post('/search',function(req,res){ 
    var query = req.body.searchbx; 
    console.log(query); 
    var dbsearch = Contact.find({$text: {$search: query}}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}}); 
    console.log(dbsearch); 

    Contact.find({$text: {$search: query }}, function (err, results){ 
     if(err){ 
      console.log(err); 
     } 
     if(results){ 
      console.log('in results') 
      console.log(results) 
      res.render("search",{results: results}); 
     } 
    }) 

    }); 
} 
module.exports = ContactController; 

在玉文件

form(id="search-filter" method ="POST" action="/search") 
input#search-bx(type='text', name='searchbx' placeholder="search here") 
input(type="submit", value="Search") 

回答

0

我希望你是初學者的NodeJS。歡迎:)

你做了很多事情,除了2件重要的事情!

  1. 您已使用POST方法進行搜索操作。按照HTTP標準,你必須使用GET或補丁,搜索相關的操作

請閱讀: http://restfulapi.net/http-methods/

  • 你已經嘗試了文本搜索。 $ text查詢工作,mongodb需要使用文本索引爲字段編制索引。 你想要做一些一個發生在你的貓鼬

    {字段:{類型:[字符串],文本:真正}

  • REF: https://docs.mongodb.com/v3.2/core/index-text/

    下面是簡單幹淨代碼: 您可以根據樣品

    var mongoose = require('mongoose'); 
    module.exports = mongoose.model('Todo', { 
        name : {type : String, unique: true, text: true}, 
        location: {type: String} 
    }); 
    
    Controller: 
    app.get('/api/todo/search/:searchKey', function (req, res) { 
         var searchKey = req.params.searchKey; 
         if (!searchKey) { 
          return res.send({ reason: 'searchKey required' }); 
         } 
         Todo.find({ 
          $text: { $search: searchKey }}, function(err, result) { 
           if (err) { 
            res.status(500); 
            return res.send({ reason: err.toString() }); 
           } else if (result && result.reason) { 
            return res.status(400).send(result); 
           } 
           return res.status(200).send(result); 
          }); 
        }); 
    

    所有最好不要修改!

    相關問題