2017-09-08 3 views
0

Ich möchte eine dynamische Suche in Mungo von erstellen (erhalten Sie die URL in der Anfrage).So erstellen Sie dynamische Suche in Mungo

Hier Probe meiner url http://www.localhost:3000/listing?&colour=blue&gender=women

Benutzer können mehrere Farbe und Geschlecht wählen, so dass die URL http://www.localhost:3000/listing?&colour=blue&gender=women&colour=red&gender=men

wie kann ich 3 Abfrage Datensatz mit Daten in meinem mongodb haben wie

1) Geschlecht: 'männlich', Farbe: 'rot'

2) Geschlecht: 'Frauen', Farbe: 'blue'

3) Geschlecht: 'Frauen', Farbe: 'blue'

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); 
}) 

Darf ich wissen, wo ich falsch gemacht haben

Antwort

0

Warum fusionieren nicht alle Anfragen in einer mit $ oder Betreiber?

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

}); 

Mit http://www.localhost:3000/listing?&colour=blue&gender=women&colour=red&gender=men als Beispiel Ihre req.query sollte als

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

zu Ihnen kommen ich die Länge der Farbe und Geschlecht Arrays unter der Annahme wird die gleiche sein, so dass Sie

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

Und dann tun

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

}); 
Verwandte Themen