mongodb正则表达式在流星中搜索问题

时间:2014-02-17 08:38:04

标签: regex mongodb meteor

我的代码是

var search_element=Session.get("search_string");
var adc="/"+search_element+"*/";
console.log(adc);
return Polls_Coll.find({question:{$regex:adc}});

为什么它不起作用

如果我给

Polls_Coll.find({question:{$regex:/Best*/}});

在conslow它正在工作,如果我用值(search_element)替换正则表达式它不起作用。我认为它正在取代这样的

Polls_Coll.find({question:{$regex:"/Best*/"}});(with quotes "/Best*/")

这是主要问题吗?或者我做了什么愚蠢的错误?

2 个答案:

答案 0 :(得分:11)

语法有两种:

Polls_Coll.find({question:/Best*/});

Polls_Coll.find({question:{$regex:"Best*"}});

你已经在每个元素中使用了元素,这可能就是为什么它不起作用了。有关mongodb文档的详细信息:http://docs.mongodb.org/manual/reference/operator/query/regex/

这两种形式在Meteor中运行良好,所以你不应该对它们有任何问题。

答案 1 :(得分:6)

我使用这种语法,它对我有用:

Polls_Coll.find({ name: {$regex: "adc", $options: '-i'} });

类似于:

SELECT * FROM Polls_Coll WHERE name LIKE '%adc%'

我还使用https://atmospherejs.com/meteor/reactive-var实现代码如下:

if (Meteor.isServer) {
    Meteor.publish('customersSearch', function(searchValue){
        if (searchValue) {
            return Customers.find({ name: {$regex: searchValue, $options: '-i'} });
        }
   });
}

var searchQuery = new ReactiveVar();

Template.NewRO.onCreated(function(){
    var self = this;
    self.autorun(function() {
        self.subscribe('vehicles');
        self.subscribe('customersSearch', searchQuery.get());
    });
});