2015-03-02 79 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 } }); 
}) 

或者类似的规定有场无空格都准备直接搜索上。