我有一个类似于以下的表格
field1
============
sssss(x)sdfs
ddd(d)fsdfsd
adf(d)dfssdf
sdf(x)sdfsdf
我想检索 field1 括号中的所有不同文本,如何获得以下输出?
subStirng
===========
x
d
我有一个类似于以下的表格
field1
============
sssss(x)sdfs
ddd(d)fsdfsd
adf(d)dfssdf
sdf(x)sdfsdf
我想检索 field1 括号中的所有不同文本,如何获得以下输出?
subStirng
===========
x
d
一个简单的解决方案是运行一个 map-reduce 作业来创建一个集合,例如
sssss x sdfs
ddd d fsdfsd
adf d dfssdf
sdf x sdfsdf
此时可以运行 distinct 或者您可以在 mr 中编写 reduce 函数以获得以下结果
x
d
使用正则表达式:
> db.test.insert({"field1":"sssss(x)sdfs"})
> db.test.insert({"field1":"ddd(d)fsdfsd"})
> db.test.find().forEach(function(foo){print(foo.field1.match(/\w*\((\w)\)\w*/)[1])})
x
d
我发现上面的方法没有显示distinct
结果。
或者尝试 map/reduce 功能?
m = function(){emit(this.field1.match(/\w*\((\w)\)\w*/)[1], 1)}
r = function(key, values){ return 1;}
db.test.mapReduce(m, r, {out:{inline:1}})
{
"results" : [
{
"_id" : "d",
"value" : 1
},
{
"_id" : "x",
"value" : 1
}
],
"timeMillis" : 399,
"counts" : {
"input" : 30003,
"emit" : 30003,
"reduce" : 302,
"output" : 2
},
"ok" : 1,
}
或者...也许您可以在插入之前找到子字符串并将其存储在另一个字段中。我认为这种方式会更快。