se tenga lo siguiente colección MongoDB de documentos:Obtener documentos con etiquetas en la lista, ordenada por el número total de partidos
{
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'
]
},
...
¿Cómo recuperar una lista de elementos que coincidan con una lista de etiquetas, ordenados por el número total de etiquetas coincidentes? Por ejemplo, teniendo en cuenta esta lista de etiquetas como entrada:
['shirt', 'cotton', 'black']
que me gustaría recuperar los elementos clasificados en orden descendente por el número total de etiquetas coincidentes:
item total matches
-------- --------------
Shirt One 3 (matched shirt + cotton + black)
Shirt Three 2 (matched shirt + cotton)
Shirt Two 1 (matched shirt)
En un esquema relacional, etiquetas sería una tabla separada, y usted podría unirse contra esa mesa, contar las coincidencias y ordenar por el conteo.
Pero, en Mongo ...?
parece que este enfoque podría trabajar,
- ruptura de las etiquetas de entrada en varias "en" declaraciones
- consulta de artículos por el "OR" 'ing juntas las entradas etiqueta
- es decir, donde (' camisa' IN items.tags) OR ('algodón' IN items.tags)
- este volvería, por ejemplo, tres casos de "camisa One", 2 casos de "camisa tres", etc
- mapa/reducir esa salida
- mapa: emitir (this._id, {...});
- reducir: contar los casos totales de _id
- de finalización: ordenar por conté total de
Pero no me queda claro sobre cómo implementar esto como una consulta Mongo, o si esto es aún la enfoque más eficiente.
que parece ser simple trabajo de M/R. –
No M/R es simple en el código de producción ya que la implementación actual carece del paralelismo adecuado. De hecho, se puede hacer un buen caso para evitar m/r en situaciones de alto rendimiento. –