Express 如何在mongoose中创建动态搜索
我想在mongoose from中创建一个动态搜索(在请求中获取URL) 这是我的url示例 用户可以选择多种颜色和性别,以便url可以 我在mongodb中有3条查询记录,数据如下 1) 性别:'男性', 颜色:“红色” 2) 性别:“妇女”, 颜色:“蓝色”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
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) {
});