Requisitos previos :
La base de datos ya está creada con las publicaciones de las colecciones y su esquema es el siguiente:
module.exports = function(mongoose){ var Schema = mongoose.Schema; var postSchema = new Schema({ postID: String, title: String, description: String }); mongoose.model('post', postSchema, 'posts'); postSchema.index({title: 'text'}); };Enrutador del nodo para manejar a través de una API:
apiRouter.get('/api/searchPosts', function(req, res, next){ postModel.find( { $text : { $search : req.query.text } }, { score : { $meta: "textScore" } } ) .sort({ score : { $meta : 'textScore' } }) .exec(function(err, posts) { if(posts){ res.json({ posts : posts }); } else { res.send('Post does not exist'); } }); });Lo que estoy tratando de lograr:
Quiero hacer un campo en mi tabla de publicaciones llamado texto de título que se pueda buscar.
Mi pila:
MongoDB, NodeJS (con Mongoose), Angular
Mi acercamiento:
Como se mencionó en los requisitos previos, he agregado la línea:
postSchema.index({title: 'text'});Además, ejecuté el siguiente comando en la terminal una vez que se crearon las colecciones:
db.posts.createIndex({"title":"text"})el problema :
Cuando accedo a esto desde la URL, funciona inicialmente, pero después de algunas semanas, deja de funcionar (¡aparece 'La publicación no existe' sin hacer ningún cambio!). Para que vuelva a funcionar, tengo que eliminar las colecciones y crear una nueva y ejecutar el comando:
db.posts.createIndex({"title":"text"})Luego comienza a funcionar durante unas semanas y así sucesivamente.
¿Que estoy haciendo mal? No estoy viendo una tendencia sobre lo que sucede en estas pocas semanas. He estado atascado en este problema durante algunas semanas, así que si alguien puede ayudar, se lo agradeceré mucho.
Gracias, Shayan
Al final, la solución fue la siguiente:
var postSchema = new Schema({ postID: String, title: { type: String, text: true }, description: String });Esto funcionó hasta ahora.
Revisaré esto nuevamente y veré si se rompe como lo hizo cada pocas semanas. Actualizaré la publicación si lo hace.
Gracias Andrei Neagu por registrar la sugerencia 'err'. A veces, los obvios simplemente se pierden