2015-03-02 111 views
1

我試圖找到由「電話」字段值匹配蒙戈文件,匹配字段 - MongoDB的

{ 
    "_id" : ObjectId("54f047aa5b9e5c7c13000000"),  
    "data" : [ 
     { 
      "Id" : "1", 
      "Country" : "India", 
      "Timezone" : "Europe/Paris", 
      **"Tel" : "03 20 14 97 70",** 
      "Prenom" : "ddd", 
      "Email" : "[email protected]", 
      "City" : "Chennai", 
      "date" : "", 
      "active" : "true" 
     } 
    ] 
} 

如何使用沒有發現下面的方法來從蒙戈收集上述文件在「電話」字段中的空格,

>db.test.find({"data.Tel":"0320149770"}) 

請任何人都可以幫助我!

+0

我很抱歉,但似乎不可能。有人可能能證明我。 – Henkealg 2015-03-02 07:36:06

+0

不可能將任何reg exp應用於鍵? – 2015-03-02 07:37:27

+1

如果您在向觀衆呈現數據時保存了像這樣的「電話」條目以獲得良好視覺效果,請考慮將「tel」保存爲「0320149770」,並在演示時將其分開。 這也會使保存的文檔的權重最小化。 – Henkealg 2015-03-02 07:39:55

回答

3

如果這是您真正想要定期執行的操作,那麼您最好在文檔中添加另一個字段,該字段的字符串不帶任何空格。

雖然有些功能可以執行搜索,但沒有一種方法能夠使用索引來匹配文檔,所以這意味着要掃描集合中的所有內容以便找到匹配項。

您可以在條款與JavaScript的評價做到這一點:

db.test.find(function() { 
    return this.data.some(function(el) { 
     el.Tel.replace(/ /g,"") == "0320149770" 
    }); 
}); 

但不這樣做,因爲這是非常糟糕的。你最好只更新所有的數據,而不是:

db.test.find().forEach(function(doc) { 
    doc.data = doc.data.map(function(el) { 
     el.TelNum = el.Tel.replace(/ /g,""); 
    }) 
    db.test.update({ "_id": doc._id },{ "$set": { "data": doc.data } }); 
}) 

或者類似的規定有場無空格都準備直接搜索上。