replset replicated replicar replica example create allow mongodb tags

replicated - MongoDB: obtener documentos por etiquetas



replicated to allow failover in mongodb (3)

Tengo documentos que contienen tags array. Deseo proporcionar recomendaciones basadas en etiquetas en el sitio, por lo que necesito obtener documentos que contengan las mismas etiquetas + documentos que no coincidan con 1 etiqueta + documentos que no coincidan con 2 etiquetas, etc.

¿Cómo puedo hacer eso?


colección de ejemplo:

db.tags.insert({"tags":["red", "tall", "cheap"]}); db.tags.insert({"tags":["blue", "tall", "expensive"]}); db.tags.insert({"tags":["blue", "little", "cheap"]});

buscar todos etiquetados "azul"

db.tags.find({tags: "blue"})

encontrar todos etiquetados "azul" y "barato"

db.tags.find({ tags: { $all: ["cheap", "blue"] } } )

encontrar todo no "azul"

db.tags.find({tags: { $ne: "blue" } })

encontrar todo "azul" y "barato" pero no "rojo" y no "alto"

no es posible en mi mongo db. Desde mongodb 1.9.1 en algo así debería funcionar, aunque (no probado):

db.tags.find({ $and: [ {tags: { $all: ["blue", "cheap"] } }, { tags: { $nin: ["red", "tall"] } } ] })


Pasos:

  1. Encuentra productos coincidentes que contengan cualquiera de las claves especificadas.

  2. Despliegue en las teclas

  3. Encuentra de nuevo para filtrar no deseado después de desplegarse

  4. Agruparlos agregando la aparición de la clave

  5. Ordenar desc para obtener más relevante primero

[{"$ match": {"keys": {"$ in": [{"$ regex": "text", "$ options": "i"}]}}}, {"$ unwind": " $ keys "}, {" $ match ": {" keys ": {" $ in ": [{" $ regex ":" text "," $ options ":" i "}]}}}, {" $ group ": {" _id ": {" productId ":" $ productId "}," relatedTags ": {" $ sum ": 1}}}, {" $ sort ": {" relatedTags ": -1}}, {"$ limit": 10}]


La pregunta reformulada es:

Supongamos que si las publicaciones de trabajo tienen etiquetas de búsqueda adjuntas como

Ofertas de trabajo

[{_id : ObjectId(1249999493),tags : [''Location1'', ''SkillSet1'', ''SkillSet2'', ''Someother1'', ''Someother2'']}, {_id : ObjectId(1249999494),tags : [''Location3'', ''SkillSet1'', ''SkillSet0'', ''Someother4'', ''Someother3'']}]

Ahora, él quiere que los registros tengan etiquetas [''Location1'', ''SkillSet1'', ''SkillSet0'']

Y los documentos seleccionados que tengan más palabras clave de la consulta deberían ser lo primero. Menos palabras clave que coincidan deben ser las últimas. Entonces, uno puede obtener una publicación de trabajo más adecuada para la consulta de búsqueda.

¿Soy sensato o necesito volver a formular?