sql >> Databáze >  >> NoSQL >> MongoDB

Máte problém při rozdělování a počítání dat v CSV v MONGODB (s hodnotami Null ve sloupcích, jako je název sloupce:)

Myslím, že jsem problém objevil. Zvažte následující vstupní data:

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

Tato chybová zpráva označuje, že MR aktuálně nelze použít k vrácení pole hodnot. Pokud se podíváte na svou funkci snížení:

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

"values" bude pole "array.length" seskupených podle klíče. Protože klíč "a,b,c" byl vydán dvakrát (stejná logika platí pro více dokumentů s ""), hodnoty (v mém příkladu) jsou pole se dvěma prvky a MR nemůže vrátit pole.

Pokud je pro konkrétní klíč vygenerován jeden dokument (což je případ _id:1), funkce snížení se nezavolá. To vysvětluje, proč se vám nezobrazí chybová zpráva, když nevydáte prázdné znaky.

Aby tato operace MR fungovala, musíte vygenerovat jeden dokument pro {znaky:""}. Pokud poskytnete další informace o svých datech, můžeme vám pomoci najít náhradní řešení.

EDIT:

Následující funkce snížení zajistí, že bude vrácena jedna hodnota, nikoli pole:

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

EDITACE 2:

Chcete-li zabránit chybě, "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. dotaz mongo :najít počet pole ve všech dokumentech kolekce

  2. Podporuje Spring Data MongoDB funkci řazení MongoDB 3.4?

  3. MongoDB – Nastavení podmíněného příkazu v .find()

  4. Je možné nastavit MongoDB v prostředí sdíleného hostingu?