Node.js Mongo DB查找查询未按预期工作

时间:2018-10-20 03:40:22

标签: javascript node.js mongodb

请帮助我找到我的代码中的错误

const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
var a = "2018";
var b = "December";
var c = "12";
var temp = "17";

var query = `{'${b}.${c}.temp':'${temp}'}`;
console.log(query);

MongoClient.connect(url,{ useNewUrlParser: true },(err, client) => {
    if (err){
      return console.log('Unable to login to Mongo DB');
    }
    const db = client.db('test'); 
 db.collection('updateTest').find(query).toArray()
.then((result) =>{
    if(err){
        return console.log(err);
    }if(result.length > 0){
        console.log(JSON.stringify(result));
    }else{
        console.log(JSON.stringify({Error:"Cannot find request"}));
    }
});
client.close();
});

当我直接在find({“ December.12.temp”:temp})中使用条件时,它可以工作 很好

当我为变量分配条件并在find(query)中使用它时,它工作正常。

var query = {"December.12.temp":temp};

但是当我从用户的输入中分配一个值时,查询无法按预期运行,而是像未指定任何条件一样运行。

var query = `{'${b}.${c}.temp':'${temp}'}`;

2 个答案:

答案 0 :(得分:0)

当您使用反引号(``)时,查询变量变成字符串,执行完嵌入其中的所有JavaScript后(即使用b和c的值)。实际上,您要求查询变量是一个对象,而不是字符串。因此它失败了。 看看这个doc 附言:我最终也发表了评论。

答案 1 :(得分:0)

var a = "2018";
var b = "December";
var c = "12";
var temp = "17";
var query = {};

var value = '${b}.${c}.temp';

query[value] = temp;

db.collection('updateTest').find(query).toArray()
.then((result) =>{
    if(err){
       return console.log(err);
    }if(result.length > 0){
        console.log(JSON.stringify(result));
    }else{
        console.log(JSON.stringify({Error:"Cannot find request"}));
    }

}