Korzystanie MgO na bson.Unmarshal()
nie wystarcza - że funkcja ma za zadanie zająć []byte
reprezentujących jeden dokument i odrzuć go do wartości.
Będziesz potrzebować funkcji, która odczyta następny cały dokument z pliku zrzutu, a następnie możesz przekazać wynik do bson.Unmarshal()
.
Porównując to do encoding/json
lub encoding/gob
byłoby wygodne, jeśli mgo.bson
miał Reader
rodzaju spożytego dokumentów z io.Reader
.
W każdym razie, z pliku source for mongodump, wygląda na to, że plik zrzutu jest tylko serią dokumentów, bez plików nagłówkowych/stopek lub jawnych separatorów rekordów.
BSONTool::processFile pokazuje, w jaki sposób magazyn mongore czyta plik zrzutu. Ich kod odczytuje 4 bajty w celu określenia długości dokumentu, a następnie wykorzystuje ten rozmiar do odczytania reszty dokumentu. Potwierdzono, że prefiks rozmiaru jest częścią bson spec.
Oto playground example, który pokazuje, w jaki sposób można to zrobić w Go: przeczytaj pole długości, przeczytaj resztę dokumentu, niegłośny, powtórz.
Tak, potrzebujemy 'bson.NewDecoder (...)' idealnie, w tym przypadku użycia. –