在python中使用自定义字符串的Mongodb查询

时间:2012-08-22 10:48:59

标签: python mongodb

我正在尝试查询下面的mongodb集合。

>>> db.ds.find({"from":{'$regex':'Pooja'}}).count()
18

但是当我使用自定义字符串追加这个相同的查询时,它会给我一个错误..

>>> a = 'Pooja'
>>> querystring = ''
>>> querystring = querystring+"'from':{'$regex':"+a+"}"
>>> querystring
"'from':{'$regex':Pooja}"
>>> db.ds.find({querystring}).count()
SyntaxError: invalid syntax
>>> 

我确实需要明确查询字符串中的多个参数,所以我使用这种方式。 任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

您的代码中存在严重错误。

首先:

db.ds.find({querystring}).count()  # SyntaxError here

此行提供SyntaxError的问题,因为{object}语法是set内置类型的文字,自Python 2.7.x版本开始提供,因此,您在此处# 39;重新尝试创建一个由一个字符串组成的集合:

{object}  # creates set since Python 2.7
{object1: object2}  # creates dict (object1 should be [hashable][1])

让我们看一下在Python 2.7中创建set的例子:

s = {1, 2, 3}  # Creating set of three unique elements ({} - set literal)
d = {1: 'a', 2: 'b'}  # Creating dict of number->letters ({:} - dict literal)

第二件事是MongoDB Python驱动程序(我假设您使用Pymongo)并不接受字符串作为查询。它拥有自己的API,所有查询都是通过表示JSON对象的dict来完成的(注意,Mongo将所有对象存储在JSON的二进制表示中,称为BSON)。

所以在这里,请记住第一个问题,当您尝试创建set而不是dict时)。

结论:

  1. 使用dict来创建相应的Pymongo个查询。
  2. 正确创建dicts(不是设置)。