2016-11-25 20 views
1

我想在MongoDB中的$ in命令中使用regex。但是,它只允許根據文檔的模式正則表達式。

當我嘗試使用這樣的模式與字符串列表,它失敗

collection.find({"categories": { "$in": ["/^item1$/i","/^item2$/i","/^item3$/i"] } },{"_id":0}).count() 

然而,當我嘗試這一點,它的工作原理

collection.find({"categories": { "$in": [/^item1$/i,/^item2$/i,/^item3$/i] } }).count() 

這是爲什麼?我使用PyMongo並需要傳遞一個字符串列表。我怎麼做?

回答

0

使用PyMongo,您需要創建一個正則表達式對象列表,方法是使用re.compile()編譯每個對象,如here.所示。但這樣做效率很低。

相反,你應該使用一個字符類來寫你的正則表達式。見demo

import re 

pat = re.compile(r'^item[1-3]$') 
collection.find({'categories': pat})