2016-12-09 5 views
0

のは、私はマングースに次のモデルを持っていると仮定しましょう:マングースの配列パラメータフィルタ

var Product = new Schema({ 
    eanCode: String, 
    brandName: String, 
    productNameNl: String, 
    sex: String, 
    suggestedRetailPrice: Number 
}) 

にはどうすればいいのパラメータを持つ配列を使用して、このモデルを照会する機能を書き込むことができますか?私はフィルタパラメータの配列を使用してこのモデルから何かを得ることができる汎用関数が必要です。たとえば:

var filterArray = [ 
    sex: "gents", 
    brand: "brandName" 
]; 
var fieldsArray = ["sex", "brand", "productNameNl", "eanCode"]; 
var getBrandGentsProducts = getProducts(filterArray); 

function getProducts(fields, filter){ 
    Product.Find({fields}, {filter}).exec(function(err, products){ 
     return products; 
    }) 
} 

答えて

0

はあなたのフィルタのためのキーと値のペアを構築するためにあなたのfieldArrayを減らすことができ

例:

// create a filterMap for your fields and value that you want to filter with 
var filterMap = { 
    sex: "gents", 
    brand: "brandName" 
}; 
var fieldsArray = ["sex", "brand", "productNameNl", "eanCode"]; 
var getBrandGentsProducts = getProducts(filterArray); 

function mapFilter(fields, filter) { 
    return fieldsArray.reduce(function (obj, field) { 
    if (filterMap[field]) { 
     obj[field] = filterMap[field]; 
    } 
    return obj; 
    }, {}); 
} 
function getProducts(fields, filter){ 
    var filterPair = mapFilter(fields, filter); 
    //console.log(filterPair) //output { "brand": "brandName", "sex": "gents" } 
    Product.Find(filterPair).exec(function(err, products){ 
     return products; 
    }) 
} 
関連する問題