我为查询构建标准,如下所示,我将其存储在名为“option”
的变量中if (typeof cb.parametre.categorie !== "undefined")
{
if(typeof options !== "undefined") {
options =options+ '{categorie: ' + cb.parametre.categorie + '}';
}else
{
options = '{categorie: ' + cb.parametre.categorie + '}';
}
}
if (typeof cb.parametre.localisation !== "undefined")
{
if(typeof options !== "undefined")
{
options=options+',{nomVille:'+cb.parametre.localisation.address_components[0].long_name+'}';
}
else
{
options='{nomVille:'+cb.parametre.localisation.address_components[0].long_name+'}';
}
}
if(cb.parametre.motclef)
{
if(typeof options !== "undefined")
{
options=options+",{or: [{titre:{'like':'%"+cb.parametre.motclef+"%'}},{details:{'like':'%"+cb.parametre.motclef+"%'}}]}";
}else
{
options="{or: [{titre:{'like':'%"+cb.parametre.motclef+"%'}},{details:{'like':'%"+cb.parametre.motclef+"%'}}]}";
}
}
在if
说明options={categorie: 1},{or: [{titre:{'like':'%Voiture%'}},{details:{'like':'%Voiture%'}}]}
之后
但是当我在查询中传递标准“选项”时,我得不到结果
Article.find().where(options)
.where({prix:{'>':prixmin, '<':prixmax}})
.sort(cb.parametre.filterBy)
.populate('images').populate('devise').exec(function(err,result){
if(result)
{
val(null,result);
}
if(err)
{
val(err,null);
}
})
相反如果我直接发送选项的值作为标准,如下所示
Article.find().where({categorie: 1},{or: [{titre:{'like':'%Voiture%'}},{details:{'like':'%Voiture%'}}]})
.where({prix:{'>':prixmin, '<':prixmax}})
.sort(cb.parametre.filterBy)
.populate('images').populate('devise').exec(function(err,result){
if(result)
{
val(null,result);
}
if(err)
{
val(err,null);
}
})
我得到了结果,我不知道为什么,因为对我来说它是一样的。 我该怎么做才能解决这个问题?
答案 0 :(得分:2)
您正在创建的选项变量是字符串
options = '{categorie: ' + cb.parametre.categorie + '}';
这是错误的,你需要创建一个对象
options = { categorie : cb.parametre.categorie }
以下是您尝试做的更清晰的版本
var options = options || {}
if (typeof cb.parametre.categorie !== "undefined") {
options.categorie = cb.parametre.categorie;
}
if (typeof cb.parametre.localisation !== "undefined") {
options.nomVille = cb.parametre.localisation.address_components[0].long_name;
}
if(cb.parametre.motclef) {
options.or = [
{ titre: { 'contains':cb.parametre.motclef } } ,
{ details:{ 'contains':cb.parametre.motclef } }
]
}