Domanda

Ho documento come questo:

{
   "_id": ObjectId("4d17c7963ffcf60c1100002f"),
   "title": "Text",
   "params": {
     "brand": "BMW",
     "model": "i3"
    }
}

{
   "_id": ObjectId("4d17c7963ffcf60c1100002f"),
   "title": "Text",
   "params": {
     "brand": "BMW",
     "model": "i5"
    }
}

Che cosa ho bisogno è il conteggio di ogni valori Parametri. come:

brand
---------
BMW (2)

model
---------
i3 (1)
i5 (1)

Credo che devo alla mappa di scrittura / ridurre funzioni. Come posso fare questo? Grazie.

È stato utile?

Soluzione

Credo che devo alla mappa di scrittura / ridurre funzioni.

Sì avete bisogno di una mappa-ridurre per questo. Per alcuni semplici mappa-ridurre esempi, un'occhiata qui .

Per il vostro caso particolare, è necessario prima di cambiare la vostra aspettativa di uscita. L'uscita della mappa / ridurre è una raccolta. La collezione sarà (nel tuo caso) qualcosa di simile:

{ key : { 'brand' : 'bmw' }, value : 2 }
{ key : { 'model' : 'i5' }, value : 1 }

Per generare questo set avrete bisogno di una funzione di "mappa" e una funzione di "ridurre". La funzione "mappa" emetterà una chiave e un valore. La chiave è ogni elemento params, il valore è il conteggio di 1. Il "ridurre" funzione accetta una chiave ed una matrice di valori e restituisce un singolo valore. La tua domanda è fondamentalmente lo stesso come questo esempio sulla MongoDB sito :

map = function() {
    if (!this.params) {
        return;
    }
    for (index in this.params) {
        emit(this.params[index], 1);
    }
}

reduce = function(previous, current) {
    var count = 0;

    for (index in current) {
        count += current[index];
    }

    return count;
}

Altri suggerimenti

Nella funzione mappa enumerare le proprietà della proprietà params dell'oggetto this. Per ogni proprietà a trovare emit chiamata con una chiave che contiene sia il nome della proprietà e il valore della proprietà. Passare 1 come valore. per esempio. emit({'brand','BMW'}, 1) ma, ovviamente, utilizzando variabili non costanti!

Nella funzione di ridurre si sono passati una chiave e un array di valori. Sommare questi valori e restituire la somma. Anche se la matrice iniziale sarà tutti i 1 di non essere tentati di utilizzare la lunghezza della matrice perché la funzione di ridurre può essere chiamato in modo iterativo.

È possibile raggruppare i risultati in seguito dal risultato di raccolta, applicando un indice, se necessario, per le prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top