Nakonec jsem na to přišel. Problém nebyl s kódováním. Bylo to se strukturou dokumentů.
Protože jsem vyšel ze standardního příkladu MongoPipeline, který se nezabývá vnořenými odpadkovými položkami.
To, co dělám, je:BlogItem:"url"...comments =[CommentItem]
Takže moje BlogItem má seznam CommentItems. Nyní nastal problém zde, pro zachování objektu v databázi dělám:
self.db[self.collection_name].insert(dict(item))
Takže zde analyzuji BlogItem na diktát. Ale neanalyzuji seznam položek CommentItems. A protože traceback zobrazuje CommentItem jako diktát, nenapadlo mě, že problematický objekt není diktát!
Takže konečně způsob, jak tento problém vyřešit, je změnit řádek při přidávání komentáře do seznamu komentářů jako takového:
item['comments'].append(dict(comment))
Nyní jej MongoDB považuje za platný dokument.
A konečně k poslední části, kde se ptám, proč dostávám výjimku na konzoli python a ne ve skriptu.
Důvodem je, že jsem pracoval na python konzoli, která podporuje pouze ascii. A tím pádem chyba.