我想效仿“&”用于在我的mongo db中搜索元素的运算符。
有4个可搜索字段name
id
tags
negative_tags
如果匹配为真,则其中任何一个都可以匹配。
例如,如果我搜索a&b
,则“a”可以在4个字段中的任何一个中匹配,也可以匹配“b”。但是,他们需要匹配
我尝试过以下
Model.or({:name.all => regexps}, {:id.all =>regexps}, {:tags.all => regexps}, {:negative_tags.all => regexps})
regexps
是一个正则表达式数组。对于给出的示例,它将是
[ /a/i, /b/i ]
但是,这并不像我想要的那样,因为你需要匹配所有匹配属性。
我的另一个尝试是为每个regexp运行单独的mongo查询并获取集合的交集。
Model.or({:name.in => one_regexp}, {:id.in => one_regexp}, {:tags.in => one_regexp}, {:negative_tags.in => one_regexp})
我的问题是我不确定如何合并两个哈希值。 Mongoid
懒惰地评估查询并返回Mongoid::Criteria
对象。
我想知道如何做一个交叉点
答案 0 :(得分:0)
有两种不同的方法可以解决这个问题。您是否尝试对每个字段进行正则表达式求值,或者对于名称是否为真,对于id,b是否为真?
如果是后者,我会使用宝石:
如果是前者,我只需将数组加入单个正则表达式中:
one_regexp.collect {|regexp| "(?=.*#{regexp}" }.join
如果你想要做的是在每个字段上应用两个RegEx表达式,只需将它们都放在非消耗模式中并使用一个正则表达式。这被称为正向前瞻断言(?=)与。*运算符相结合,允许顺序颠倒。
/(?=.*a)(?=.*b)/