2016-05-09 110 views
0

我想使用Nodejs在Mongodb集合中實現整個搜索功能。 什麼我應該通過SaleModel.find()所以給全價值搜索?使用nodejs搜索整個集合(mongodb)

以下是我所嘗試的,但它只搜索product_name,我也想搜索sale_amount,sale_person,department_name。

我該怎麼做?

SaleModel.find({'product_name': 'searched value'}); 

模式:

var saleSchema = mongoose.Schema({ 
    product_name:{ type:String, required:true}, 
    sale_amount:{ type:Number, required:true }, 
    sale_date:{ type:Date, default:Date() }, 
    sale_person:{ type:String, required:true }, 
    department:{ type:mongoose.Schema.Types.ObjectId, ref:'department' }, 
}); 
module.exports = mongoose.model('sale', saleSchema); 
+0

閱讀關於快遞航線的文檔,你的'list'函數完全混亂並且不正確 –

+0

也顯示路由器,如果'Models.SaleModel'是一個貓鼬模型,貓鼬不支持承諾awaik,只有回調 –

+0

爲什麼你返回匹配數據總數和總數據。總數據的長度本身就是數字。 –

回答

0

我會非常多寫清潔,下面示例使用async.parallel無極Mongoose.Query

function list(req) { 

    // promise or callback works as well 
    return new Promise(function(resolve, reject){ 

     // npm install async --save 
     var async = require('async'); 

     // some validation can be applied 
     var page = { 
      skip: req.query.start || 1, 
      limit: req.query.length || 25, 
      text: req.query.search || ''  // <== this is new property! 
     }; 

     // reuse Mongoose.Query with search by regex 
     var Query = Models.SaleModel.find({ 
      product_name: new RegExp(page.text, "i") 
     }); 

     // run without waiting until the previous function has completed 
     async.parallel([ 
      function(){ 
       Query.count(callback); // <== count 
      }, 
      function(){ 
       Query.skip(page.skip).limit(page.limit).exec('find', callback); // <== items 
       // or the below one should also work, just don't remember 
       // Query.skip(page.skip).limit(page.limit).exec(callback); 
      } 
     ]), function(err, results){ 
      if(err){ 
       reject(err); 
      } else { 
       resolve({ 
        count: results[0], 
        data: results[1] 
       }); 
      } 
     }); 
    }); 
} 
+0

長相好!如何在此解決方案中應用搜索邏輯? –

+0

更新,請記住,永遠不會改變問題,你刪除了1000個符號 –

+0

我會試試.. –