MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Importuj dane csv jako tablicę w mongodb za pomocą mongoimport

Dla mnie najprostszy sposób, aby dowiedzieć się, jak sformatować plik „CSV” dla mongoimport jest po prostu utworzenie kolekcji, a następnie użycie mongoexport na nim, aby zobaczyć, jak powinien wyglądać format CSV.

Stwórz więc swój dokument z powłoki:

db.newcol.insert({
  id:"122234343",
  name: "name1",
  children: ["222334444","333344444"]
})

Następnie wyjdź z powłoki i uruchom mongoexport :

 mongoexport -d test -c testcol --fields id,name,children --type csv > out.csv

Który pokaże wynik jako:

id,name,children
122234343,name1,"[""222334444"",""333344444""]"

Gdzie „tablica” jest reprezentowana przez „ciąg” i przy użyciu cudzysłowów "" w ich ucieczce.

To teraz jest całkiem jasne miejsce do użycia mongoimport z, więc po prostu „zaimportuj” teraz, aby przetestować:

mongoimport -d test -c newcol --headerline --type csv out.csv

Wejdź ponownie do powłoki i zobacz dokument(y) w nowej kolekcji:

db.newcol.findOne()
{
        "_id" : ObjectId("59476924d6eb0b7d6ac37e02"),
        "id" : 122234343,
        "name" : "name1",
        "children" : "[\"222334444\",\"333344444\"]"
}

Więc wszystko tam jest, ALE dzieci są wymienione jako „łańcuch”, a nie tablica. Ale to naprawdę nie jest problem, ponieważ zaimportowaliśmy dane i teraz tylko od nas zależy, czy teraz je przekształcimy:

var ops = [];
db.testcol.find({ "children": { "$type": 2} }).forEach(doc => {
  var children = doc.children.split(',').map( e => e.replace(/"|\[|\]|\\/gm,'').toString() );
  ops.push({
    "updateOne": {
      "filter": { "_id": doc._id },
      "update": { "$set": { "children": children } }
    }
  });

  if ( ops.length >= 1000 ) {
    db.newcol.bulkWrite(ops);
    ops = [];
  }             
});

if ( ops.length > 0 ) {
  db.newcol.bulkWrite(ops);
  ops = [];
}

Więc to będzie iterować wszystko, co zostało zaimportowane do kolekcji, które ma typ BSON 2, który jest „ciągiem” poprzez $type operator zapytania.

Następnie bierzemy ciąg, dzielimy go jako tablicę i usuwamy pozostałe znaki, aby pozostawić tylko żądaną wartość.

Używanie .bulkWrite() wprowadzasz te aktualizacje w wydajny sposób, zamiast pisać każdy dokument na żądanie. W rzeczywistości są wysyłane na serwer w partiach po 1000.

Efektem końcowym jest dokument w oryginalnej, poszukiwanej formie:

db.testcol.findOne()
{
        "_id" : ObjectId("5947652ccb237bd6e4e902a5"),
        "id" : "122234343",
        "name" : "name1",
        "children" : [
                "222334444",
                "333344444"
        ]
}

To jest moje "krok po kroku", jak możesz opracować swój format CSV, zaimportować go, a następnie "przekształcić" dane do stanu, w którym są potrzebne.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 2 sposoby na ograniczenie dokumentów zwracanych w MongoDB

  2. Szukaj w wielu kolekcjach w MongoDB

  3. MongoDB Schema Design — wiele małych dokumentów czy mniej dużych dokumentów?

  4. Importuj dokumenty do MongoDB z tablicy dokumentów JSON

  5. Jak używać Spring do łączenia się z MongoDB, która wymaga uwierzytelnienia?