2015-04-12 80 views
0

我有JSON对象,用于作业具有按键调用技能并且是技能列表的JSON对象。例如使用django和mongoengine执行正则表达式查询

{ 
    "_id" : ObjectId("552a42cd03462b0728feb180"), 
    "did" : "JB77FW6885MCCRGG30T", 
    "attributes" : { 
     "EducationRequired" : "Bachelor's Degree", 
     "ExperienceRequired" : "At least 3 year(s)", 
     "ExternalApplication" : "True", 
     "City" : "Houston", 
     "Company" : "IBM", 
     "DegreeRequired" : "4 Year Degree", 
     "Skills" : { 
      "Skill" : [ 
       "apache hadoop", 
       "etl", 
       "geographic information system", 
       "cloud computing", 
       "mongodb", 
       "nosql", 
       "linux", 
       "spark (programming language)", 
       "java (programming language)", 
       "python (programming language)", 
       "sql", 
       "machine learning", 
       "data management", 
       "data integration" 
      ] 
     } 
    } 

} 

{ 
    "_id" : ObjectId("552a42cd03462b0728feb180"), 
    "did" : "JB77FW6885MCCRGG30T", 
    "attributes" : { 
     "EducationRequired" : "Bachelor's Degree", 
     "ExperienceRequired" : "At least 5 year(s)", 
     "ExternalApplication" : "True", 
     "City" : "Boston", 
     "Company" : "Microsoft", 
     "DegreeRequired" : "4 Year Degree", 
     "Skills" : { 
      "Skill" : [ 
       "java (programming language)", 
       "python (programming language)", 
       "sql", 
       "machine learning", 
       "data management", 
       "data integration" 
      ] 
     } 
    } 

} 

我想有“SQL”或'Java的

的工作,我有以下呼叫

skills = ['java','sql'] 
jobs = Job.objects(__raw__={'attributes.Skills.Skill' : {'$in' : skills}}) 

这样做的问题是,它不返回具有'java'的作业,因为在数据库中,技能列表具有'java(编程语言)'而不仅仅是'java'。为了解决这个问题,我需要在查询中添加一个正则表达式。所以我尝试了以下但他们都没有工作:

Job.objects(__raw__={'attributes.Skills.Skill' : {'$in' : ['$/.*java.*/']}}) #ignoring sql for now 
Job.objects(__raw__={'attributes.Skills.Skill' : {'$in' : ['sql',re.compile('$/.*java.*/', re.IGNORECASE)]}}) 
Job.objects(__raw__={'attributes.Skills.Skill' : {'$in' : ['sql',re.compile('/.*java.*/', re.IGNORECASE)]}}) 

任何想法,我应该做什么?

+0

为什么不直接看'java(编程语言)'?像'skills = ['java(编程语言)','sql']'? – BorrajaX

+0

,因为java平台等数据中还有其他java(xxxxxx)实例。通常候选人都有Java技能,但职业生涯API有java(编程语言)等等。 – Amer

回答