我将MongoDB $and
与$lt
和$gt
结合使用,如下所示:
var queryString0 = 'data.' + req.body.data[0].keyname;
console.log(queryString0);
//Prints 'data.price'
Company.find({ $and : [{ queryString0 : { $lt : 200, $gt : 100}}]}, {name: 1, queryString0 : 1} , function(err, result) {
if (err) {
throw err;
}
res.send(result);
});
问题是,当我使用queryString0
检索数据时,这没有给我任何结果,但是,如果我使用这样的静态字符串,它会给我所需的结果:
var queryString0 = 'data.screener.' + req.body.data[0].keyname;
console.log(queryString0);
//Prints 'data.price'
Company.find({ $and : [{ 'data.price' : { $lt : 200, $gt : 100}}]}, {name: 1, 'data.price' : 1} , function(err, result) {
if (err) {
throw err;
}
res.send(result);
});
这对我没有任何意义,因为在这两种情况下都应该提供相同的查询字符串。
请帮我弄清楚我的代码有什么问题。
编辑:我使用$and
的原因是因为我还需要检查几个字段是否与我的其他条件匹配,如下所示:
var queryString0 = 'data.screener.' +req.body.data[0].keyname;
var queryString1 = 'data.screener.' +req.body.data[1].keyname;
Company.find({ $and : [
{queryString0 : {$lt : req.body.data[0]["max"], $gt : req.body.data[0]["min"]}},
{queryString1 : {$lt : req.body.data[1]["max"], $gt : req.body.data[1]["min"]}}
] },{ name : 1, queryString0 : 1, _id : 0 }, function(err, result) {
if (err) {
throw err;
}
res.send(result);
})
答案 0 :(得分:2)
你开始使用正确的概念我在代码中构建了一些东西,但是忘记了JavaScript“字符串化”对象键。所以有一个不同的表示法。
此外,您根本不需要$and
:
var queryString0 = 'data.screener.' + req.body.data[0].keyname;
var query = {};
query[querystring0] = { $lt : 200, $gt : 100};
var projection = { name: 1 };
projection[querystring0] = 1;
Company.find(query,projection,function(err,result) {
// work in here
});
所以“括号”表示法是如何使用变量内容作为键的名称。并且“所有”MongoDB查询参数无论如何都是“和”条件,所以你很少需要用$and
包装它们,除非你需要为同一个字段提供“两个或更多”的条件。