2017-09-08 29 views
0

我想從(在請求中獲取URL)中創建一個動態搜索貓鼬。如何在貓鼬中創建動態搜索

這裏是我的網址 http://www.localhost:3000/listing?&colour=blue&gender=women

用戶能夠選擇多種顏色和性別,這樣的樣品的URL可以像 http://www.localhost:3000/listing?&colour=blue&gender=women&colour=red&gender=men

我有3個查詢記錄在我的MongoDB的數據像

1)性別:男性, 顏色:紅色

2)性別:女性, 色: '藍色'

3)性別: '女人', 顏色: '藍'

var productSchema = new Schema ({ 
     price: String, 
     gender: String, 
     colour: String, 
     item: [{ 
      name: String, 
      slug: String, 
      sku: String, 
      size : String, 
      stock: String, 
     }], 
     attributes: { 
      waterProof : String, 
      warranty : String, 
      caseMaterial : String, 
      movement : String, 
      lens : String, 
      bandMaterial : String, 
      options : String, 
      typeOfMovement : String, 
     } 
    }); 

var arrayGet = req.query; 
var generateQeury ="{"; 
for (var k in arrayGet){ 
if (arrayGet.hasOwnProperty(k)) { 
    if(k =='gender'){ 
    var gender = arrayGet[k]; 
    }else if(k =='colour'){ 
    var colour = arrayGet[k]; 
    } 
} 

if (typeof gender !== 'undefined'){ 
    generateQeury += '{gender : { $in: gender },'; 
} 
if (typeof colour !== 'undefined'){ 
    generateQeury += '{price : { $in: colour }'; 
} 

generateQeury +="}"; 

// i get 3 query from mongoDB which is wrong 
Product.find(generateQeury,function(err,result){ 
    console.log(result); 
}) 

//i get 2 query from mongoDB which is correct 
Product.find({gender : { $in: gender },colour : { $in: colour }},function(err,result){ 
    console.log(result); 
}) 

可能我知道我做錯了

回答

0

爲什麼不使用所有的查詢合併成一個$或運營商?

Product.find({ 
    $or [ 
     { colour: 'blue', gender: 'women' }, 
     { colour: 'red', gender: 'men' } 
    ] 
}, function (err, results) { 

}); 

使用http://www.localhost:3000/listing?&colour=blue&gender=women&colour=red&gender=men作爲一個例子,你req.query應該向你走來的

{ 
    colour: [ 
     'blue', 
     'red' 
    ], 
    gender: [ 
     'women', 
     'men' 
    ] 
} 

我假設顏色和性別數組的長度將是相同的,所以你可以做

var query = {}; 
query.$or = req.query.colour.map(function (colour, i) { 
    return { 
     colour: colour, 
     gender: req.query.gender[i] 
    } 
}); 

然後做

Product.find(query, function (err, results) { 

});