0

我正在尝试查询 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
>>> 

我确实需要在查询字符串中明确地使用多个参数,所以我正在使用这种方式。有人可以帮我吗?

4

1 回答 1

1

您的代码中有一些严重的错误。

首先:

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

这行给出的问题是SyntaxError因为{object}语法是set内置类型的文字,它从 Python 2.7.x 版本开始可用,所以,在这里你试图创建一个由一个字符串组成的集合:

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

让我们看一个在 Python 2.7 中创建集合的示例:

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,所有查询都是通过dicts 表示 JSON 对象进行的(注意,Mongo 将所有对象存储在 JSON 的二进制表示中,称为 BSON)。

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

结论:

  1. 使用dicts 创建适当的Pymongo查询。
  2. 正确创建字典(不是集合)。
于 2012-08-22T11:00:35.900 回答