我正在使用nodejs和mongoose。
另一个函数将为我提供一个原始的mongodb查询作为字符串,我需要直接在数据库上执行它并传回结果。
我需要的是类似于在mysql连接对象上执行mysql查询字符串,但我不知道如何为mongo执行此操作。请帮忙。
我不知道模型,查询可以是任何东西。这是主要问题。甚至类似 节目集 的内容在此处有效。
我知道这会使SQL容易受到SQL注入,但在这种情况下这不是问题,所以不用担心。
提前致谢。
答案 0 :(得分:1)
如果我理解正确,你试图从某个界面(网页或其他东西)获取mongo命令,在服务器上运行它并发回结果。
所以从本质上讲,你正在尝试模拟mongo shell。一种方法可能是使用mongo的--eval命令行参数。
对于此类型的每个请求,生成一个新节点子节点,运行mongo --eval <your command in quotes>
并继续从父节点中的子节点监听stdout事件(child.stdout.on('data',cb)) ,并将结果数据转储到客户端。
您还可以将javascript文件作为参数传递给mongo命令。这意味着您可以将mongo查询转储到临时js文件,使用mongo命令在子进程中执行该文件并转储结果。
答案 1 :(得分:0)
我知道这里有一个答案以某种形式使用eval(),我在你添加的评论中看到你期望字符串信息。但如果我强烈阻止你这样做,我会这样做。
实际上你被要求产生一个mongo shell,虽然它很新颖,但可能不会很实用。
但在您 达到 eval()的内部用法之前,我建议您在网上阅读并注意警告。
在我链接的表单中,这将触发任意JavaScript到您的服务器并在那里运行结果。安全性和锁定存在大问题,而且与采用这种方法有关。
相反,如何创建自己的API层以获取序列化参数。因此,不要将整个命令存储在字符串中,只需调用端点来说明 find()并处理参数。
{
collections: <collection>,
query: <query_condition>,
project: <projection>,
options: <options>
}
或任何适合你的结构。在那里,您甚至可以在字符串中使用JSON表单,您可以使用它来反序列化为代码的数据。
这对我来说似乎更合乎逻辑,更安全,然后直接以您提出的形式发送命令。因此可能更多类似于通过网络发送SQL语句作为文本。