sql >> Databasteknik >  >> NoSQL >> MongoDB

Har ett problem när du delar upp och räknar data i en CSV i MONGODB (har nollvärden i kolumner som kolumnnamn:)

Jag tror att jag har upptäckt problemet. Tänk på följande indata:

{_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"

Det här felmeddelandet indikerar att MR för närvarande inte kan användas för att returnera en matris med värden. Om du tittar på din reduceringsfunktion:

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

"värden" kommer att vara en matris med "array.length" grupperade efter nyckel. Eftersom nyckeln "a,b,c" sändes ut två gånger (samma logik följer för flera dokument med ""), är värden (i mitt exempel) en array med två element, och MR kan inte returnera arrayer.

Om ett enstaka dokument sänds ut för en viss nyckel (vilket är fallet för _id:1), kommer reduceringsfunktionen inte att anropas. Detta förklarar varför du inte får ett felmeddelande när du inte sänder nolltecken.

För att få den här MR-operationen att fungera måste du skicka ett enda dokument för {tecken:""}. Om du tillhandahåller ytterligare information om dina uppgifter kan vi kanske hjälpa dig att hitta lösningar.

EDIT:

Följande reduceringsfunktion säkerställer att ett enda värde, snarare än en matris, returneras:

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

EDIT 2:

För att förhindra felet, "errmsg" :"exception:kartanrop misslyckades:JS Error:TypeError:this.characters har inga egenskaper nofile_b:1", "code" :9014...

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



  1. req.body är odefinierad genomsnittlig app

  2. Mongoose skickar data från withTransaction helper

  3. Redis inskrivna transaktioner

  4. skalskript - kontrollera att mongod-servern körs