Запросы в mongodb 3.4 - PullRequest
       6

Запросы в mongodb 3.4

0 голосов
/ 18 мая 2018

У меня есть большие XML-файлы, которые мне пришлось конвертировать в json и хранить в mongodb.Код Python для преобразования и вставки:

import pymysql
import re
import json
import xmltodict
from pymongo import MongoClient

# Open Database Connection.
db = pymysql.connect("fffff","ddd","fgf","hnj")

# prepare a cursor object
cursor = db.cursor()

# execute SQL query 
cursor.execute("SELECT jlp.appid, convert(MAX(lex.response) using utf8) FROM jos_lender_portfolio jlp INNER JOIN jos_lexnex_data lex ON jlp.appid = lex.appid\
                group by appid limit 10;")

# Fetch all rows
data = cursor.fetchall()

a = (r'(?=<response>)(.*)(?<=</response>)')
def cleanxml(xml):
    if re.findall(a, xml, re.S):
        file = re.findall(a, xml, re.S)[0]
    else:
        file = "<response>NA</response>"
    return file
data = list(data)
client = MongoClient()
db = client['lexnex']
collection = db['test']
for row in data:
    thexml = cleanxml(row[1])
    jsonString = json.dumps(xmltodict.parse(thexml), indent = 4)
    d = json.loads(jsonString)
    newdict = {"caseid" : row[0]}
    newdict.update(d)
    jsondata = json.dumps(newdict, indent = 3)
    f = json.loads(jsondata)
    db.test.insert_one(f)

Теперь проблема: я очень плохо знаком с mongodb и у меня проблемы с запросом к моей базе данных. У меня есть следующий json:

"_id":ObjectId("5aeff8537871560bf05d8c25"),
"caseid":44136,
"response":{
   "Header":{
      "TransactionId":"18092257R1069402",
      "Status":"0"
   },
   "Records":{
      "Record":[
         {
            "Filings":{
               "Filing":{
                  "Type":"INITIAL FILING",
                  "Date":{
                     "Day":"23",
                     "Month":"9",
                     "Year":"2008"
                  }
               }
            },
            "FilingJurisdiction":"NY",
            "MatchedParty":{
               "PartyType":"D",
               "Address":{

                  "City":"BROOKLYN",
                  "State":"NY",
                     },
               "OriginName":"GOLDLINE"
            },
            "Secureds":{
               "Secured":{
                  "Addresses":{
                     "Address":{
                        "City":"SCHAUMBURG",
                        "State":"IL"
                     }
                  }
               }
            }
         },
         {
,
            "Filings":{
               "Filing":{
                  "Type":"INITIAL FILING",
                  "Date":{
                     "Day":"23",
                     "Month":"9",
                     "Year":"2008"
                  }
               }
            },
            "FilingJurisdiction":"NY",
            "MatchedParty":{
               "PartyType":"D",
               "Address":{
                  "City":"BROOKLYN",
                  "State":"NY",
               },
               "OriginName":"GOLD"
            },
            "Secureds":{
               "Secured":{
                  "Addresses":{
                     "Address":{
                        "City":"SCHAUMBURG",
                        "State":"IL"
                     }
                  }
               }
            }
         }
      ]
   }
}

Это небольшая часть очень большого документа, и таких документов более миллиона.Теперь ожидаемый результат, который я хочу получить для каждого caseid, некоторой части Filings и Secureds.Вот пример ожидаемого результата:

"_id":ObjectId("5aeff8537871560bf05d8c25"),
"caseid":44136,
"Filings":{
   [
      "Filing":{
         "Type":"INITIAL FILING",
         "Date":{
            "Day":"23",
            "Month":"9",
            "Year":"2008"
         }
      },
      "Secureds":{
         "Secured":{
            "Addresses":{
               "Address":{
                  "City":"SCHAUMBURG",
                  "State":"IL"
               }
            }
         }
      },
      {
         "Filing":{
            "Type":"INITIAL FILING",
            "Date":{
               "Day":"23",
               "Month":"9",
               "Year":"2008"
            }
         }
      },
      "Secureds":{
         "Secured":{
            "Addresses":{
               "Address":{
                  "City":"SCHAUMBURG",
                  "State":"IL"
               }
            }
         }
      }
   ]
}

Существует несколько казеидов, и у каждого есть 0 или более заявок.Я понятия не имею, как это сделать.Я знаю основы, как простые запросы.Но это, я думаю, требует $ unwind и $ group вместе.То, что я написал до сих пор, - не что иное, как это:

db.test.aggregate([{$unwind:{path: '$response'}},{"$group":{_id:{caseid:"$caseid"}}}])

Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...