2013-01-19 50 views
1

pymongo有没有办法使用字符串来执行查询而不是字典? 我希望能够使用与python/pymongo上的MongoDB shell完全相同的语法。那可能吗?pymongo使用字符串来查询而不是字典

+0

你在找什么样的语法?你可以定义一个辅助函数来为你做这件事。例如,我很常见的创建一个函数,比如'def find(s):return mongo.db.col.findOne({“_ id”:s})' – Anorov

+0

是的,但那不是我想要的。我正在工作的poc需要执行用户提供的任何查询。我想把所有的实际工作都留给MongoDB服务器本身。 –

+0

这听起来不像是个好主意。你知道一个诡计多端的用户可以读写任何他们想要的数据库吗? – Anorov

回答

0

MongoDB shell是一个全功能的JavaScript控制台/解释器,带有一些绑定到带有mongodb服务器的消息。相比之下,PyMongo缺乏嵌入式JavaScript解释器或JavaScript解析器,因此您无法按原样执行MongoDB外壳查询。

请注意,mongo shell查询不是json文档,因为它们能够包含一些函数和一些对象构造函数,如{value: 2+2}

+0

是的,你是对的,把所有的事情都放到了上下文中。然后,我正在寻找的是通过pymongo执行JavaScript代码的方法。我会看看mjhm提出的eval() –

0

eval()功能可能是你要找的。请注意,它在数据库服务器上执行JS代码 - 不是在某些客户端的Mongo shell中。因此它有很多警告,我强烈建议不要在严重的生产环境中使用它。有关详细信息和示例,请参阅Mongo db.eval docs

+0

这可能确实是我正在寻找的。我要做一些测试,并让你知道结果。 –

+0

这不会有效 - 我建议使用pymongo给你的惯用python。它会更有效率,并且是本地python,它紧密地映射到本地shell。 – Ross

相关问题