我想根据给定的过滤器从mongodb中选择数据。如果我通过静态过滤器,我会得到正确的结果。
即
var filter = {'categories ':'business'};
如果我输入动态值,它就不会显示出来。我能够将变量类型视为对象,并且值也是正确的。
static async getArticle(req, res, next) {
try {
var filter = {};
if(req.body.categories || req.body.categories != "") {
filter.categories = req.body.categories;
}
console.log('val: '+JSON.stringify(filter));
console.log('org val: '+filter);
console.log('obj type: '+typeof(filter));
let totalArticle = await Models.Article.find(filter).count().exec();
res.send({
success: true,
totalArticle: totalArticle
});
} catch (error) {
console.error(error);
res.send({success: false, error});
}
}
控制台中的输出是
val: {"categories":"business"}
org val: [object Object]
obj type: object
如果我按上述方式传递静态值,我会得到以下回复。
{
"success": true,
"totalArticle": 2
}
并且在控制台中它也是相同的:
val: {"categories":"business"}
org val: [object Object]
obj type: object
有人能说出我做错了吗?
答案 0 :(得分:0)
也许您有错误,因为您在“
”中设置了“filter1”而不是“filter” let totalArticle = await Models.Article.find(filter1).count().exec();
希望它有所帮助。
答案 1 :(得分:0)
我在过滤器对象中使用$and
。所以,我的查询在数据库select * from collection_name where categorie like "%business"
var filter1 = {$and: []};
if(req.body.categories) {
var cat = new RegExp(req.body.categories);
filter1.$and.push({categorie: cat});
}
let totalArticle = await Models.Article.find(filter1).count().exec();
res.send({
success: true,
totalArticle: totalArticle
});