不同的格式,我有一個電話號碼MongoDB中獲取來自現場
+90 224-XXXXXXX
+90 223-XXXXXXX
+90 228-XXXXXXX
(0221) XXX XXXX
(0224) XXX XXXX
(0222) XXX XXXX
的不同格式的電話號碼字段可以讓所有不同的電話號碼格式MongoDB的幫助?
預期成果是:2
不同的格式,我有一個電話號碼MongoDB中獲取來自現場
+90 224-XXXXXXX
+90 223-XXXXXXX
+90 228-XXXXXXX
(0221) XXX XXXX
(0224) XXX XXXX
(0222) XXX XXXX
的不同格式的電話號碼字段可以讓所有不同的電話號碼格式MongoDB的幫助?
預期成果是:2
那麼你可以在一個美妙的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
模板。
請正確,它是值,不是減號功能中的值 – Steve
@StephenTalari這就是當我只輸入響應而不從代碼複製時發生的情況。哎呀 –
保持簡單,此代碼工作。
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"
}
);
如果你不知道所有可能的格式,我認爲這是不可能的 –
什麼是格式?你必須先回答這個問題。 – heinob
一個定義你的手機格式的正則表達式,例如:'^ \ +?\ d +( - \ d +)* $' –