sql >> Database >  >> NoSQL >> MongoDB

Heb een probleem bij het splitsen en tellen van de gegevens in een CSV in MONGODB (Null-waarden hebben in kolommen zoals kolomnaam:)

Ik denk dat ik het probleem heb ontdekt. Houd rekening met de volgende invoergegevens:

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

Dit foutbericht geeft aan dat MR momenteel niet kan worden gebruikt om een ​​reeks waarden te retourneren. Als je naar je reduceerfunctie kijkt:

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

"values" is een array van "array.length"s gegroepeerd op sleutel. Omdat de sleutel "a,b,c" twee keer is verzonden (dezelfde logica volgt voor meerdere documenten met ""), zijn waarden (in mijn voorbeeld) een array met twee elementen en kan MR geen arrays retourneren.

Als een enkel document wordt verzonden voor een bepaalde sleutel (wat het geval is voor _id:1), wordt de reduceerfunctie niet aangeroepen. Dit verklaart waarom je geen foutmelding krijgt als je geen null-tekens uitstuurt.

Om deze MR-bewerking te laten werken, moet u een enkel document verzenden voor {karakters:""}. Als u aanvullende informatie over uw gegevens verstrekt, kunnen we u wellicht helpen bij het vinden van tijdelijke oplossingen.

BEWERKEN:

De volgende reduceerfunctie zorgt ervoor dat een enkele waarde, in plaats van een array, wordt geretourneerd:

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

EDIT 2:

Om de fout te voorkomen, "errmsg" :"exception:map invoke failed:JS Error:TypeError:this.characters has no properties nofile_b:1", "code" :9014...

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



  1. Mongoose - Hetzelfde schema voor verschillende collecties in (MongoDB)

  2. Documentdatabases:overtollige gegevens, referenties, enz. (specifiek MongoDB)

  3. Hoe GridFS te gebruiken om afbeeldingen op te slaan met Node.js en Mongoose

  4. MongooseError:je kunt niet meerdere keren `mongoose.connect()` gebruiken terwijl je verbonden bent