Data la seguente raccolta MongoDB di documenti:Ottenere i documenti con le etichette in lista, in ordine di numero totale di partite
{
title : 'shirt one'
tags : [
'shirt',
'cotton',
't-shirt',
'black'
]
},
{
title : 'shirt two'
tags : [
'shirt',
'white',
'button down collar'
]
},
{
title : 'shirt three'
tags : [
'shirt',
'cotton',
'red'
]
},
...
Come si recupera un elenco di elementi che corrispondono a un elenco di tag, ordinato dal numero totale di tag corrispondenti? Ad esempio, dato questo elenco di tag come input:
['shirt', 'cotton', 'black']
che vorrei recuperare gli elementi ordinati in ordine decrescente per numero totale di tag corrispondenti:
item total matches
-------- --------------
Shirt One 3 (matched shirt + cotton + black)
Shirt Three 2 (matched shirt + cotton)
Shirt Two 1 (matched shirt)
In uno schema relazionale, tag sarebbe una tabella separata e potresti unirti a quella tabella, contare le partite e ordinare per conteggio.
Ma, in Mongo ...?
Sembra questo approccio potrebbe funzionare,
- pausa i tag input in più "IN" dichiarazioni
- ricerca per articolo da "o" 'ing insieme ingressi tag
- cioè dove (' shirt' iN items.tags) OR ('cotone' iN items.tags)
- questo sarebbe tornato, per esempio, tre casi di "camicia One", 2 istanze di "camicia tre", ecc
- map/ridurre quell'output
- map: emit (this._id, {...});
- ridurre: contare occorrenze totali di _id
- finalizzare: ordina per contato totale
Ma io non sono chiare su come implementare questa come una query Mongo, o se questo è anche il approccio più efficiente.
sembra semplice lavoro M/R. –
No M/R è semplice nel codice di produzione poiché l'implementazione corrente manca del parallelismo corretto. In effetti, si può fare un buon esempio per evitare m/r nel complesso in situazioni di alto rendimento. –