开发者社区 问答 正文

如何将字符串格式的猫鼬查询转换为实际查询对象?

我正在研究应用程序,并将多个查询字符串发送到服务器,并基于该查询字符串参数,我将动态创建一个mongodb查询对象作为字符串,然后在以字符串格式获取完整查询时,我希望将其传递查找方法,并根据该查询从数据库中检索结果。让我们看一下演示代码:

// This would be the query that will be generated dynamically.
{ fullName: "Rehan Shah", PhoneNumber: "+92 315 1234567", Package: "'5df6339e5c2c9108a8d57ef0"}

// Would be stored in the variable.
let query_parameters = "{ fullName: "Rehan Shah", PhoneNumber: "+92 315 1234567", Package: "'5df6339e5c2c9108a8d57ef0"}";

现在,我想将查询参数传递给find方法。

Model.find(query_parameters).then().catch();

但是使用此实现,查询参数实际上是一个字符串,而不是实际的查询对象。如何将其转换为实际对象?我进行了很多研究,但找不到任何解决方案。

如何解决这个问题?帮助将不胜感激。谢谢。

展开
收起
几许相思几点泪 2019-12-23 17:46:11 825 分享 版权
阿里云 AI 助理回答

在JavaScript中,你可以使用JSON.parse()方法将一个JSON格式的字符串转换为JavaScript对象。这正是你当前情况下的解决方案。你的查询参数是一个看起来像JSON格式的字符串,所以你可以这样转换它:

let query_string = "{ fullName: \"Rehan Shah\", PhoneNumber: \" 92 315 1234567\", Package: \"'5df6339e5c2c9108a8d57ef0\"}";
// 注意:原始字符串中的单引号需要修正以符合JSON格式要求,MongoDB的ObjectId应该用双引号包围

// 将字符串转换为有效的JSON格式(修正单引号问题)
query_string = query_string.replace(/'/g, '"');

// 然后解析为JavaScript对象
let query_parameters = JSON.parse(query_string);

// 现在可以安全地使用这个对象作为查询参数
Model.find(query_parameters)
    .then(result => {
        // 处理查询结果
        console.log(result);
    })
    .catch(error => {
        // 处理错误
        console.error('Error executing query', error);
    });

请注意,我在示例中首先修正了字符串中的单引号问题,因为MongoDB的ObjectId和字符串值都应被双引号包围,这是标准的JSON格式要求。然后,通过JSON.parse()将其转换为实际的JavaScript对象,就可以直接用于MongoDB查询了。

确保在实际应用中对用户输入进行适当的验证和清理,以防止注入攻击等安全风险。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答