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

Passing query conditions to db.collection.find in Node.js/Mongodb where the query string is generated

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

db.event.find( { 'data.XYZ': {'$lt':15} } ) // This works.

但我想这样做:

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

db.event.find(qstr1)

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

我正在使用 mongoskin 申请。然而,即使通过 Mongo Shell 这也不起作用。

有办法吗?

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

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

如果你真的想把东西保存为字符串,你可以使用 JSON.parse:

将字符串解析为查询对象
var qstr1="{ \"data.XYZ\": {\"$lt\":15} }";
var query = JSON.parse(qstr1);

请注意,JSON.parse 要求键用双引号(而不是单引号)括起来,并且在 shell.

中不可用

像这样创建一个 JSON 字符串:

{ 
    "specilities.specility_name":"cosmetic",
    "specilities.countries.country_code":"91",
    "specilities.countries.states.state_name":"maharashtra",
    "specilities.countries.states.cities.city_name":"mumbai",
    "specilities.countries.states.cities.procedures.procedure_name":"ssss" 
}
    

并在查找传递参数中作为

abc.find(JSON.parse(str_temp_query), callback);