use*_*087 1 python regex mongodb pymongo
我正在尝试使用REGEX在pymongo中创建搜索.匹配后,我希望将数据附加到模块中的列表.我认为我已经完成了所有设置,但无论我为REGEX设置什么,它都会返回0结果.代码如下:
REGEX = '.*\.com'
def myModule(self, data)
#after importing everything and setting up the collection function in the DB I call the following:
cursor = collection.find({'multiple.layers.of.data' : REGEX})
data = []
for x in cursor:
matches.append(x)
return matches
Run Code Online (Sandbox Code Playgroud)
这只是我用来过滤大量存储在mongodb中的json文件的三个模块.但是,无论我多少次更改此格式(如/.*.com/)以在操作中声明或使用mongo中的$ regex ...它都不会找到我的数据并将其附加到列表中.
编辑:添加完整的代码以及我想要识别的内容:
RegEx = '.*\.com' #Or RegEx = re.compile('.*\.com')
def filterData(self, data):
db = self.client[self.dbName]
collection = db[self.collectionName]
cursor = collection.find({'data.item11.sub.level3': {'$regex': RegEx}})
data = []
for x in cursor:
data.append(x)
return data
Run Code Online (Sandbox Code Playgroud)
我试图解析mongodb中的JSON数据.数据的结构如下:
"data": {
"0": {
"item1": "something",
"item2": 0,
"item3": 000,
"item4": 000000000,
"item5": 000000000,
"item6": "0000",
"item7": 00,
"item8": "0000",
"item9": 00,
"item10": "useful",
"item11": {
"0000": {
"sub": {
"level": "letter",
"level1": 0000,
"level2": 0000000000,
"level3": "domain.com"
},
"more_data": "words"
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:进一步测试后,似乎我需要在搜索中包含所有图层.因此,它应该看起来像
collection.find({'data.0.item11.0000.sub.level3': {'$regex': RegEx}}).
但是,"0"可以是1-50并且随机生成"0000".有没有办法将这些设置为索引作为变量,以便它无论价值多少都会进入它?它始终是一个数字值.
好吧,你需要告诉mongodb应该将字符串视为正则表达式,使用$regex运算符:
cursor = collection.find({'multiple.layers.of.data' : {'$regex': REGEX}})
Run Code Online (Sandbox Code Playgroud)
我想简单地更换REGEX = '.*\.com'使用import re; REGEX = re.compile('.*\.com')也可能工作,但我不知道(会依赖于特定的处理pymongo驱动程序).
编辑:
关于问题的通配符部分:答案是否定的.
简而言之,未知的值永远不应该被指定为键,因为它使查询效率非常低.没有"外卡"查询.
最好重构数据库,使未知的值不是键
看到:
http://groups.google.com/group/mongodb-user/browse_thread/thread/32b00d38d50bd858
https://groups.google.com/forum/#!topic/mongodb-user/TnAQMe-5ZGs
| 归档时间: |
|
| 查看次数: |
10787 次 |
| 最近记录: |