2012-07-22 38 views
1

Node.js,mongojs,mongodb。 我正在使用正则表达式搜索技能列表。这里是我的服务器代码:MongoJS在使用正则表达式搜索时不返回数据

var nconf = require('nconf'); 
var db = require('mongojs').connect(nconf.get('mongolab:connection'), ['skills', 'users']); 

app.get('/api/skill', function(req, res){ 
    console.log('searching for ' + req.query['q']); 

    var query = '{name: /' + req.query['q'] + '/i}'; 
    console.log('query: ' + query); 
    db.skills.find(query, function(err, data){ 
     console.log('returning ' + JSON.stringify(data)); 
     if(!err){ 
      res.writeHead(200, {'content-type': 'text/json' }); 
      res.write(JSON.stringify(data)); 
      res.end('\n'); 
     } 
    }); 

}); 

我的列表中有一个“asp.net”的值。控制台日志输出这样的:

searching for .net 
query: {name: /.net/i} 
returning [] 

我用MongoHub连接到同一台服务器/数据库,粘贴查询字段的声明,并取回我的纪录:

{ 
    "name": "asp.net", 
    "description": "", 
    "_id": { 
     "$oid": "500b4aae14f7960e91000001" 
    } 
} 

有什么建议?

回答

5

query必须是一个对象,而不是一个字符串。试试这个:

var query = {name: new RegExp(req.query['q'], 'i') }; 
+0

正则表达式,而不是正则表达式。但是,是的,就是这样。奇怪的是这样的: var query = {name:new RegExp(req.query ['q'],'i')}; console.log('query:'+ JSON.stringify(query)); 无论req.query ['q']的值是什么,输出:query:{“name”:{}}。但它有效,所以我很高兴。谢谢! – 2012-07-22 01:57:30

+0

Grr。为什么我必须等5分钟才能接受答案?烦人。 – 2012-07-22 01:59:58

+1

@King'JSON.stringify(query)'outputs'{“name”:{}}'因为JSON不支持正则表达式。 – JohnnyHK 2012-07-22 03:00:04