nodejs如何执行原始mongo查询string
我正在使用nodejs和mongoose。
另一个函数将为我提供一个原始的MongoDB查询作为string,我需要直接在数据库上执行,并传回结果。
我需要的是类似于执行mysql连接对象上的mysql查询string,但我不知道如何做到这一点的mongo。 请帮忙。
我不知道模型,查询可以是任何东西。 这是主要的问题。 甚至像 show collection 这样的东西 在这里是有效的。
我知道这使得它容易受到SQL注入,但在这种情况下,这不是一个问题,所以不要担心。
提前致谢。
如果我理解正确,你正在尝试从某个接口(网页或其他)采取mongo命令,运行它在服务器上,并发回结果。
所以本质上你正在模拟mongo shell。 一种方法可能是使用mongo的–eval命令行参数。
-
对于这个types的每一个请求,产生一个新的节点子节点,运行
mongo --eval <your command in quotes>
并且继续监听父节点(child.stdout.on('data',cb))中的子节点的标准输出事件,并将生成的数据转储到客户端。 -
您也可以将一个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语句。