Estoy tratando de buscar en la colección de meteor.users por nombre de usuario.
He seguido todos los pasos detallados aquí , pero parece que no puedo hacer que funcione meteor.users .
Aquí está el código que tengo para eso:
Al iniciar el servidor:
Meteor.startup(function(){ Meteor.users._ensureIndex({ "username":"text", }); });En mi función de publicación:
Meteor.publish("Meteor.users.userSearch",function(searchVal){ if(!searchVal){ return Meteor.users.find({}); } return Meteor.users.find({$text:{$search:searchVal}}); });En el cliente:
Template.foo.helpers({ users(){ var searchValue = Session.get('searchVal'); Meteor.subscribe('Meteor.users.userSearch',searchValue); return Meteor.users.find({}); } });¿Puede alguien ayudarme a averiguar qué está mal con lo anterior?
Cuando no hay searchValue , funciona correctamente y se devuelven todos los usuarios. Tan pronto como haya algún valor de búsqueda, no se devolverá ningún usuario.
También probé directamente en la consola db.users.find({$text:{$search:"some_test"}}) y nuevamente no se devolvió ningún objeto de colección.
No necesita realizar una búsqueda de texto completo si solo desea buscar el valor de un solo campo (nombre de username en este caso). Usar el comando de find normal con el valor Regex como valor de búsqueda es mejor en este caso:
Meteor.users.find({ username: new RegExp('user1', 'gi'), });asegurarIndex: en desuso desde la versión 3.0.0 : db.collection.ensureIndex() ahora es un alias para db.collection.createIndex( ).
_ensureIndex parece ser huérfano.
Meteor.startup(function(){ Meteor.users.createIndex({ "username":"text" }); });