nodejs如何执行原始mongo查询string

我正在使用nodejs和mongoose。

另一个函数将为我提供一个原始的MongoDB查询作为string,我需要直接在数据库上执行,并传回结果。

我需要的是类似于执行mysql连接对象上的mysql查询string,但我不知道如何做到这一点的mongo。 请帮忙。

我不知道模型,查询可以是任何东西。 这是主要的问题。 甚至像 show collection 这样的东西 在这里是有效的。

我知道这使得它容易受到SQL注入,但在这种情况下,这不是一个问题,所以不要担心。

提前致谢。

如果我理解正确,你正在尝试从某个接口(网页或其他)采取mongo命令,运行它在服务器上,并发回结果。

所以本质上你正在模拟mongo shell。 一种方法可能是使用mongo的–eval命令行参数。

  1. 对于这个types的每一个请求,产生一个新的节点子节点,运行mongo --eval <your command in quotes>并且继续监听父节点(child.stdout.on('data',cb))中的子节点的标准输出事件,并将生成的数据转储到客户端。

  2. 您也可以将一个JavaScript文件作为parameter passing给mongo命令。 这意味着你可以将你的mongo查询转储到一个临时的js文件中,用mongo命令在一个subprocess中执行这个文件,然后转储结果。

我知道有一个答案在这里以某种forms使用eval() ,并且我在你的添加注释中看到了你期望的string信息。 但如果我强烈劝阻你这样做,我会。

那么实际上你被要求产生一个mongo shell,虽然小说,可能不会很实用。

但是,在你到达eval()的内部使用之前,我build议请在网上阅读并注意警告。

在我已经链接到的forms,这将打开任意JavaScript到您的服务器,并在那里运行结果。 安全性和locking方面存在很大的问题,并且更多地涉及到采取这种方法。

相反,如何创build自己的API层,将采取序列化的参数。 因此,不要将整个命令存储在一个string中,而只需要调用一个端点来说find()并处理参数。

 { collections: <collection>, query: <query_condition>, project: <projection>, options: <options> } 

或者任何适合你的结构。 在那里你甚至可以在你的string中有一个JSON表单,你可以用它来反序列化你的代码的数据。

这对我来说似乎是一个更合理的方法,并且更安全,然后直接用你提出的forms发送命令。 因此,可能类似于以文本方式通过电报发送SQL语句。