我有一个电话号码字段,其中包含不同格式的电话号码
+90 224-XXXXXXX
+90 223-XXXXXXX
+90 228-XXXXXXX
(0221) XXX XXXX
(0224) XXX XXXX
(0222) XXX XXXX
mongodb可以帮助获取所有不同的手机格式吗?
预期输出为:2
答案 0 :(得分:1)
你可以使用mapReduce来做这件事,虽然这是一个很棒的mapReduce方式:
db.collection.mapReduce(
// Mapper - replace all digits with "X"
function() {
emit( "pattern", this.number.replace(new RegExp("[0-9]","g"), "X") )
},
// Reducer
function(key, values) {
var result = { items: [] };
values.forEach( function(value) {
// Only add *not found* items to result
if ( result.items.indexOf( value ) == -1 ) {
result.items.push( value );
}
});
return result;
},
// Output
{ out: { inline: 1 } }
);
这会产生类似的结果:
{
"results" : [
{
"_id" : "pattern",
"value" : {
"items" : [
"+XX XXX-XXXXXXX",
"(XXXX) XXX XXXX"
]
}
}
],
"timeMillis" : 4,
"counts" : {
"input" : 3,
"emit" : 3,
"reduce" : 1,
"output" : 1
},
"ok" : 1,
}
我猜这只是为了检查。但是,如果您想要进行更新或我认为有用的其他内容,您可以使用返回的items
部分来构建regex
模板。
答案 1 :(得分:0)
保持简单,这段代码有效。
db.collection.mapReduce(
// Mapper
function() {
emit( this.phone_number.replace(new RegExp("[0-9]","g"), "X"),1 )
},
// Reducer
function(key, value) {
return Array.sum(value);
},
// Output
{
out: "tmp_collection"
}
);