将查询条件传递给生成查询字符串的Node.js/Mongodb中的db.collection.find

DJ0*_*073 2 mongoose mongodb node.js mongoskin

我正在尝试构建一个NodeJS/mongodb应用程序,当我读取包含(XYZ > 10)OR 的请求时(XYZ < 15).我想在旅途中生成一个查询字符串.然后在某个Mongodb Collection中搜索.以下将有效:

db.event.find( { 'data.XYZ': {'$lt':15} } ) // This works.
Run Code Online (Sandbox Code Playgroud)

但我想这样做:

var qstr1="{ \'data.XYZ\': {\'$lt\':15} // I would generate this possibly

db.event.find(qstr1)
Run Code Online (Sandbox Code Playgroud)

当我尝试将查询条件作为字符串传递给db.collection.find()它时,返回整个集合.

我正在使用mongoskin该应用程序.然而,即使通过Mongo Shell,这也不起作用.

有没有办法做到这一点?

Joh*_*yHK 6

您最终生成的是查询对象,而不是字符串,因此以编程方式构建查询对象:

var query = {};
var field = 'data.XYZ';
var operator = {};
operator['$lt'] = 15;
query[field] = operator;
db.event.find(query);
Run Code Online (Sandbox Code Playgroud)

如果您确实希望将字符串保存为字符串,则可以使用JSON.parse以下命令将字符串解析为查询对象:

var qstr1="{ \"data.XYZ\": {\"$lt\":15} }";
var query = JSON.parse(qstr1);
Run Code Online (Sandbox Code Playgroud)

请注意,JSON.parse要求密钥由双引号(不是单引号)包围,并且在shell中不可用.