我正在寻找一个可以将正则表达式存储为值的数据库.例如这样的事情:
{:name => "Tim", :count => 3, :expression => /t+/},
{:name => "Rob", :count => 4, :expression => /a\d+/},
{:name => "Fil", :count => 1, :expression => /tt/},
{:name => "Marc", :count => 1, :expression => /bb/}
Run Code Online (Sandbox Code Playgroud)
所以我可以根据查询是否匹配表达式返回行/文档(例如"FIND rows WHERE"tt"=〜:expression").并得到蒂姆和菲尔行作为结果.大多数数据库都可以完全相反(检查文本字段是否与正则表达式查询匹配).但不幸的是,mongo和postgres都不能做相反的事情.
PS或者我错了,有一些postgres或mongo扩展允许我存储正则表达式?
我的mongoDB文档中的一些字段如下所示:
{
...
Countries: [["Spain", "France"]]
...
}
Run Code Online (Sandbox Code Playgroud)
或这个:
{
...
Countries: [["Spain"],["Russia", "Egypt"]]
...
}
Run Code Online (Sandbox Code Playgroud)
我想做的就是[["Spain", "France"]]转入["Spain", "France"]和[["Spain"],["Russia", "Egypt"]]转换["Spain", "Russia", "Egypt"],类似于flatten在Ruby中使用方法.
有没有办法在mongoDB中展平数组?我需要在整个集合中的所有文档中展平数组,而不仅仅是单个文档,如果这很重要,数组中的值及其数量也会因文档而异.
我也使用Ruby作为mongo的驱动程序,因此使用Ruby驱动程序的方法对我也很有用.
我正在寻找一种数组交集的&方法,与普通方法不同,它只匹配那两个数组中相同且具有相同索引的元素.例如:
["a", "b", "c", "d"].intersect(["a", "b", "f", "d", "c"])
Run Code Online (Sandbox Code Playgroud)
应该回来
["a", "b", "d"]
Run Code Online (Sandbox Code Playgroud)
因为它们都存在于同一索引(0,1和3)的"c"两个数组中,而被排除,因为它在两个数组(2和4)中有不同的位置:
# 0 1 2 3 4
["a", "b", "c", "d"]
["a", "b", "f", "d", "c"]
Run Code Online (Sandbox Code Playgroud)
我可以想到这个问题的几种解决方案.第一个是循环,另一个是首先修改数组以在元素中包含它们的索引,然后使用相交&.例如:
["a", "b", "c"] #=> ["0a", "1b", "2c"]
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否存在更好的方法.我正在寻找使用正负索引.
假设我想找到"tags"包含标签的字段的文档:"a", "b", "c".
如果我使用$and运算符,它将只返回"tags"包含所有三个标记的文档.
这种严格的搜索不是我想要的.如果我选择使用$or运算符,它将找到包含列表中至少一个标记的文档,但它不会尝试检查是否存在首先包含其中几个或全部的文档.
我想要做的是搜索包含"尽可能多的标签,但至少有一个"的文档,或者换句话说,找到包含至少一个标签的所有文档,但首先显示最匹配的文档.我知道我可以通过一系列查询来做到这一点(例如,使用$and查询然后$or),但如果有更多的2标签,我将不得不使用不同的标签组合进行大量查询以获得良好的结果.
特别地,添加时间(例如11:40 + 00:30 = 12:10)并检查时间是否属于范围(例如(11:00..12:00).include?(11:30)).我知道我可以写一个类,但也许已经存在一个解决方案.内置Time类并不完全是我想要的,因为我对内置的与日期相关的功能不感兴趣.
这是我的代码:
query = "This is a good life"
=> "This is a good life"
query.slice!("is")
=> "is"
query
=> "Th is a good life"
Run Code Online (Sandbox Code Playgroud)
我想要做的是只在片段是一个单词时才切片,而不是另一个单词的一部分.
(" is ")不会在前一个和后一个单词之间留下空格,也不会对字符串的第一个或最后一个单词起作用.("is ")或者(" is")不保证片段不是单词的一部分.即,我怎么来自这个:
path = [ 1, 3, 4, 5 ... ]
Run Code Online (Sandbox Code Playgroud)
对此:
my_array[1][3][4][5]...
Run Code Online (Sandbox Code Playgroud)
path阵列的长度未知.