我想从一个好的旧学校rdbms那里得到一些与LIKE
相同的查询,所以我必须使用某种正则表达式。
当我尝试这个时,它工作正常
Countdowns.find({"name":{ "$regex": /ANW/ }},{ sort: {regDate: -1 }});
该值正确返回。但是,当我构建mongoDb选择器(该函数的第一个JSON参数)时,它永远不会起作用。
var key = Session.get('searchKey');
var field = Session.get('searchField');
var temp = '{"'+ field +'":{ "$regex": /'+key+'/ }}';
var selector = JSON.parse(JSON.stringify(temp));
Countdowns.find(selector,{ sort: {regDate: -1 }});
当我测试它时(在JSON.parse期间使用try-catch),JSON对象是在没有任何错误的情况下构建的,但是当我将它作为变量传递时,函数(find()
)无法运行。
还有其他方法可以构建选择器吗?
答案 0 :(得分:0)
我已经在控制台上测试了,这就是我得到的。
尝试这样做
var key = Session.get('key'), field = Session.get('field');
var selector = {};
selector[field] = { $regex : new RegExp(key) };
有了这个,你将得到:
这对于minimongo来说应该是可以接受的。
为什么JSON.parse
不起作用?在你通过temp
的地方,这就是它的样子:
在将其传递给JSON.stringify
之前,您已经有了一个字符串。可是等等!你会说,如果我把它传递给JSON.parse
它会起作用吗?让我们看看:
不。正斜杠必须格式正确,即使这样你也会得到$regex
的字符串,你需要一个RegExp
object。
所以我们之前写过的就是这样做的结果。首先,定义将数据库选择器作为对象保存的变量,然后构造selector
。