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

Wystąpił problem podczas dzielenia i zliczania danych w pliku CSV w MONGODB (posiadanie wartości Null w kolumnach, takich jak nazwa kolumny:)

Myślę, że odkryłem problem. Rozważ następujące dane wejściowe:

{_id: 1, characters: ""}
{_id: 2, characters: "a, b, c"}
{_id: 3, characters: "a, b, c"}

> db.collection.mapReduce(map, reduce, {out: { inline : 1}})
"exception: reduce -> multiple not supported yet"

Ten komunikat o błędzie wskazuje, że obecnie nie można użyć MR do zwrócenia tablicy wartości. Jeśli spojrzysz na swoją funkcję zmniejszania:

reduce = function(key, values) {
    return values;
}

„values” będzie tablicą „array.length” pogrupowaną według klucza. Ponieważ klucz "a,b,c" został wyemitowany dwukrotnie (ta sama logika obowiązuje dla wielu dokumentów z ""), wartości (w moim przykładzie) to tablica z dwoma elementami, a MR nie może zwracać tablic.

Jeśli pojedynczy dokument jest emitowany dla określonego klucza (co ma miejsce w przypadku _id:1), funkcja Reduce nie zostanie wywołana. To wyjaśnia, dlaczego nie pojawia się komunikat o błędzie, gdy nie emitujesz znaków null.

Aby ta operacja MR działała, musisz wyemitować pojedynczy dokument dla {znaków:""}. Jeśli podasz dodatkowe informacje o swoich danych, możemy pomóc w znalezieniu obejścia.

EDYCJA:

Poniższa funkcja zmniejszania zapewni, że zostanie zwrócona pojedyncza wartość, a nie tablica:

reduce = function(key, values) {
        return values[0];
}

EDYCJA 2:

Aby zapobiec błędowi, "errmsg" :"wyjątek:wywołanie mapy nie powiodło się:Błąd JS:TypeError:this.characters nie ma właściwości nofile_b:1", "code" :9014...

map = function() { 
    if (this.characters != null){ 
         var array = this.characters.split(','); 
         emit(this.characters, array.length);
    } 
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Utwórz wielojęzyczny indeks tekstowy w MongoDB

  2. Jak uruchomić mongodb, zakładając konto

  3. Jak działa sortowanie w nowym rozszerzeniu mongodb PECL?

  4. Znajdź dokumenty z tablicą, która nie zawiera określonej wartości

  5. $elemDopasuj z wyrazistym