MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB InvalidDocument:Objekt kann nicht codiert werden

Endlich habe ich es verstanden. Das Problem war nicht mit der Codierung. Es lag an der Struktur der Dokumente.

Weil ich auf das Standard-MongoPipeline-Beispiel losgegangen bin, das sich nicht mit verschachtelten Scrapy-Elementen befasst.

Was ich mache ist:BlogItem:"url"...comments =[CommentItem]

Mein BlogItem hat also eine Liste von CommentItems. Jetzt kam das Problem hierher, um das Objekt in der Datenbank zu speichern, mache ich:

self.db[self.collection_name].insert(dict(item))

Hier parse ich also das BlogItem in ein Diktat. Aber ich parse nicht die Liste der CommentItems. Und da der Traceback das CommentItem wie ein Diktat anzeigt, kam ich nicht auf die Idee, dass das problematische Objekt kein Diktat ist!

Der Weg, dieses Problem zu beheben, besteht also darin, die Zeile beim Anhängen des Kommentars an die Kommentarliste als solche zu ändern:

item['comments'].append(dict(comment))

Jetzt betrachtet MongoDB es als gültiges Dokument.

Schließlich für den letzten Teil, in dem ich frage, warum ich eine Ausnahme auf der Python-Konsole und nicht im Skript bekomme.

Der Grund ist, dass ich an der Python-Konsole gearbeitet habe, die nur ASCII unterstützt. Und damit der Fehler.