2012-08-22 106 views
0

我想查詢的MongoDB集合類似下面..MongoDB的查詢中使用自定義字符串在python

>>> 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

代碼中存在一些嚴重錯誤。

首先:

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,所有查詢都是通過代表JSON對象的dict來完成的(請注意,Mongo以JSON的二進制表示形式存儲所有對象,稱爲BSON)。

所以在這裏,請記住第一個問題,當您嘗試創建set而不是dict)。

結論:

  1. 使用dict s到創建適當的Pymongo查詢。
  2. 正確創建(沒有設置)dicts。
+0

我用字典的方法做了,謝謝你。但是,你能否詳細說明一下「SyntaxError,因爲{object}語法是一個設置內置類型的文字」.. –

+0

已更新的答案,但你最好參考python文檔集:http://docs.python.org/library /sets.html –

相關問題