def extractFieldsFromDoc(self, doc, prefix=""):
"""Extract field values defined in self.columns from document into a dict required for csv.DictWriter."""
res = dict()
for field, value in doc.items():
if type(value) == dict: # subdocument
res.update(self.extractFieldsFromDoc(value, prefix + field + "."))
elif type(value) == list:
if type(value[0]) == dict: # multiple nested documents
nestedcolfield = self.params['nestedcolfield']
nestedvalfield = self.params['nestedvalfield']
if nestedcolfield != None and nestedvalfield != None:
for subdoc in value:
try:
nestedcol = prefix + field + "." + subdoc[nestedcolfield]
if nestedcol in self.columns:
res[nestedcol] = subdoc[nestedvalfield]
except KeyError: # nested document doesn't contains column name or value field
pass
else: # multivalued field
if prefix + field in self.columns:
res[prefix + field] = self.params["listsep"].join(value)
else: # simple value
if prefix + field in self.columns:
res[prefix + field] = value
return res
评论列表
文章目录