根据字段值在mongodb中搜索数据

时间:2016-09-26 09:17:06

标签: arrays node.js mongodb search filter

我正在使用mongodb和node.js.在我的数据库中,我有6个字段

  1. bid
  2. color(Array)
  3. size(Array)
  4. CAT_ID
  5. sub_cat_id
  6. 一切正常。现在我想在我的代码中添加过滤器。在过滤区域中,我添加了所有字段。用户选择多种颜色和大小,因此它将采用数组格式,但大多数时候用户不会选择颜色选项或大小选项,此时字段值为空,因此我的过滤器不会从数据库中获取任何结果。所以如果在搜索过程中值为空,我想删除颜色或大小字段。我尝试了下面的代码,但它没有工作。我这样做。

    var catId     = new Array();
    var sort      = saveFilterSort.sort;
    var filter    = req.body;
    
    if(req.body.catId){
      catId.push("category_id:"+req.body.catId);
    }
    
    if(req.body.subcatid){
      catId.push("sub_category_id:"+req.body.subcatid);
    }
    
    if(req.body.minprice){
      catId.push("price:{$gt:"+req.body.minprice+"}");
    }
    
    if(req.body.maxprice){
     catId.push("price:{$lt:"+req.body.maxprice+"}");
    }
    
    if(req.body.color){
      catId.push("color:{$in:"+req.body.color+"}");
    }
    
    if(req.body.size){
      catId.push("attribute:{$in:"+req.body.size+"}");
    }
    
    var finalCat = catId.join(',');
    
    console.log(finalCat);
    console.log(catId);
    
    
    if((filter) && (sort)){ 
        Product.find(
        {
          brand_id:bid, finalCat
        },
        function(error,fetchallFeatProds)
        {
          console.log('#######################');
          console.log(fetchallFeatProds);
          console.log('#######################');
          callback(error,fetchallFeatProds);
    
        }).sort( {_id:-1,price:-1} );
    

    此代码无效。请帮我。

1 个答案:

答案 0 :(得分:2)

Mongoose找到原型句柄json而不是字符串

var query     = {brand_id:bid};
var sort      = saveFilterSort.sort;
var filter    = req.body;

if(req.body.catId){
  query.category_id = req.body.catId;
}

if(req.body.subcatid){
  query.sub_category_id = req.body.subcatid;
}

if(req.body.minprice){
 query.price = {$gt:req.body.minprice};
}

if(req.body.maxprice){
  query.price = {$lt:req.body.maxprice};
}

if(req.body.color){
 query.color = {$in:req.body.color};
}

if(req.body.size){
  query.attribute = {$in:req.body.size};
}


if((filter) && (sort)){ 
  Product.find(query, ...