Si la palabra clave coincide en category.title , entonces está dando resultado; de lo contrario, no coincide con ningún otro campo. ¿Alguien puede decirme cuál es el problema aquí? También probé NewsModel.find().or(filters) sin $or key, aún no funciona.
let filters = {}; if (keyword) { filters = { $or: [ { title: keyword, }, { shortDescription: keyword, }, { detailDescription: keyword, }, { "category.title": keyword, }, ], }; } const response = await NewsModel.find(filters);mangosta: 6.3.0
Actualización: colección DB agregada
{ "_id": "625b83518b1eaedc58a74196", "title": "Moon Knight", "shortDescriptipn": "Embrace the chaos.", "detailDescription": "When Steven Grant, a mild-mannered gift-shop employee...", "category": [ { "_id": "625b7dfd00e7f082f6d8d9fb", "title": "Entertainment" } ], "createdAt": "2022-04-17T03:02:41.353Z", "updatedAt": "2022-04-17T03:02:41.353Z", "__v": 0 } Si busco Entertainment , obtengo un resultado, pero si busco Moon Knight , obtengo una matriz vacía.
Puede usar este código para que funcione, también ha escrito incorrectamente shortDescriptipn en la base de datos.
Lo que hice fue usar la palabra clave $or con la búsqueda de expresiones regulares, por lo que no necesita escribir una cadena completa, si contiene esa parte de la cadena, devolverá el documento y no será un caso estricto de coincidencia completa, también he agregado la opción i lo que hará que la búsqueda no distinga entre mayúsculas y minúsculas.
La consulta será como:
db.collection.find({ $or: [ { title: { $regex: keyword, $options: "i" }, }, { shortDescriptipn: { $regex: keyword, $options: "i" }, }, { detailDescription: { $regex: keyword, $options: "i" }, }, { "category.title": { $regex: keyword, $options: "i" }, }, ], })También puede consultar la consulta aquí: https://mongoplayground.net/p/7zuhbaNTWJY
Déjame saber, si tienes alguna duda en los comentarios.