Quindi io sono nuovo con MongoDB e MapReduce in generale e mi sono imbattuto in questo "capriccio" (o almeno nella mia mente un capriccio)MongoDB MapReduce - emettere una chiave/valore di uno pretende molto chiamare ridurre
Dire che ho oggetti nella mia collezione in questo modo:
{ 'chiave': 5, 'valore': 5}
{ 'chiave': 5, 'valore': 4}
'chiave' { : 5, 'valore': 1}
{ 'chiave': 4, 'valore': 6}
{ 'chiave': 4, 'valore': 4}
{ 'chiave': 3, 'valore': 0}
mio mappa funzione emette semplicemente la chiave e il valore
mio ridurre funzione aggiunge semplicemente i valori e prima di tornare li aggiunge 1 (ho fatto questo per controllare per vedere se la funzione di ridurre è e ven chiamato)
miei risultati seguono:
{ '_id': 3, 'valore': 0}
{ '_id': 4, 'valore': 11.0}
{ '_id': 5, 'valore': 11.0}
Come si può vedere, per i tasti 4 & 5 ottengo la risposta attesa di 11, ma per ° e tasto 3 (con una sola voce nella collezione con quella chiave) ottengo l'inaspettato 0!
È questo comportamento naturale di mapreduce in generale? Per MongoDB? Per il pymongo (che sto usando)?
Giusto per essere chiari, questo è il modo in cui è stata progettata la riduzione della mappa. Se desideri modificare i documenti con chiavi univoche (come la chiave 3), considera l'utilizzo della funzione finalize: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-FinalizeFunction – Jenna
qual è la soluzione se vogliamo includere chiave con singolo documento nei risultati ??? –
@RaviKhakhkhar i singoli documenti sono ancora inclusi nei risultati, solo le funzioni di riduzione non vengono mai chiamati su di loro – Cilvic