【发布时间】:2018-07-05 15:11:47
【问题描述】:
我有以下问题:
我正在使用 NodeJS 与 Express 和 MongoDB 来查询我的数据库。
我在包含字段“域”的“域”集合中有一个文档。
例如:
{
"domain" : "mydomain.com, www.mydomain.com, beta.mydomain.com, *.beta.mydomain.com",
"APIKeys" : [ "Public" : 111111 ]
}
或其他文件:
{
"domain" : "example.com, *.example.com",
"APIKeys" : [ "Public" : 222222 ]
}
如果extractHostname(req.get('Referrer')) 匹配字段中的任何域,我想查询数据库并返回结果。
var collection = 'domains';
var query = { $and: [ { 'APIKeys.Public' : req.query.APIKey }, {'domain' : extractHostname(req.get('Referrer')) } ] };
var projection = { '_id' : 1 , 'playerPref' : 1 };
例如:extractHostname(req.get('Referrer')) = beta.mydomain.com 它应该返回 true,因为它匹配 beta.mydomain.com 的正则表达式。
'test.beta.mydomain.com' 应该返回 true,因为它匹配 *.beta.mydomain.com 的正则表达式。
'test.www.mydomain.com' 应该返回 false。
'www.mydomain.com.maliciousdomain.com' 应该返回 false。
知道如何进行这样的查询来检查推荐人是否符合条件吗?
我面临的问题是字段中的任何字符串都需要匹配查询,而不是相反。请记住字段中的通配符,而不是搜索字符串中的通配符。 (这就像一个储备正则表达式?)
亲切的问候, 雨果
【问题讨论】:
-
如果您希望它包含
beta.mydomain.com,那么只需use that as your regular expression -
我更新了我的问题以更好地反映问题。输入是引用者的主机名。应根据数据库检查它是否匹配该字段中的任何域,包括通配符。