Express 如何在mongoose中创建动态搜索

Express 如何在mongoose中创建动态搜索,express,mongoose,Express,Mongoose,我想在mongoose from中创建一个动态搜索(在请求中获取URL) 这是我的url示例 用户可以选择多种颜色和性别,以便url可以 我在mongodb中有3条查询记录,数据如下 1) 性别:'男性', 颜色:“红色” 2) 性别:“妇女”, 颜色:“蓝色” var productSchema = new Schema ({ price: String, gender: String, colour: String, ite

我想在mongoose from中创建一个动态搜索(在请求中获取URL)

这是我的url示例

用户可以选择多种颜色和性别,以便url可以

我在mongodb中有3条查询记录,数据如下

1) 性别:'男性', 颜色:“红色”

2) 性别:“妇女”, 颜色:“蓝色”

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 generateQuery ="{";
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'){
    generateQuery += '{gender : { $in: gender },';
}
if (typeof colour !== 'undefined') {
    generateQuery += '{price : { $in: colour }';
}

generateQuery +="}";

// i get 3 query from mongoDB which is wrong
Product.find(generateQuery, 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);
})
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 generateQuery ="{";
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'){
    generateQuery += '{gender : { $in: gender },';
}
if (typeof colour !== 'undefined') {
    generateQuery += '{price : { $in: colour }';
}

generateQuery +="}";

// i get 3 query from mongoDB which is wrong
Product.find(generateQuery, 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);
})

我可以知道我哪里做错了吗

为什么不使用$or运算符将所有查询合并为一个查询

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

});
例如,您的
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) {

});