次のようなテーブルがあります
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
正規表現を使用します。
> 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,
}
または...挿入する前に部分文字列を見つけて、別のフィールドに保存できるかもしれません。この方法の方が速いと思います。
簡単な解決策の1つは、map-reduceジョブを実行して、次のようなコレクションを作成することです。
sssss x sdfs
ddd d fsdfsd
adf d dfssdf
sdf x sdfsdf
その時点で、distinctを実行するか、mrでreduce関数をプログラムして次のようにすることができます。
x
d