javascript - 通过省略空格来匹配字段 - MongoDB

标签 javascript mongodb mongodb-query

我正在尝试通过匹配“Tel”字段值来查找 mongo 文档,

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

如何使用下面的查找方法从 mongo 集合中获取上述文档,而“Tel”字段中没有空格,

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

谁能帮帮我!!!

最佳答案

如果这是您真正想要定期执行的操作,那么您最好向文档中添加另一个字段,该字段包含不带任何空格的字符串。

原因是虽然您可以执行搜索功能,但没有一种方法能够使用索引来匹配文档,因此这意味着扫描集合中的所有内容以找到匹配项。

您可以在 $where 中使用 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 } });
})

或者按照这些思路创建一个没有空格的字段,所有这些字段都可以直接搜索。

关于javascript - 通过省略空格来匹配字段 - MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28804588/

相关文章:

javascript - HH :MM with Moment. js(或没有)的小时数

javascript - 在这个 Mongoose 独特的预保存验证中我做错了什么?

javascript - 允许替换特定文本

java - Spring Data MongoDB 标识符作为对象

c# - MongoDB 嵌入式文档和 C#/POCO

regex - 最后三个字母匹配字符串 "ces"

javascript - 电脑重启后Chrome.Storage.Local中的数据会被清除吗?

java - Spring Data Repositiories - 为每个查询添加特定参数

arrays - 将数据推送到嵌套数组nodeJs、MongoDB中

javascript - 如何动态构建Mongodb聚合语句?