如何使用mongo查询在存储在mongodb中的json数据的特定属性中查找特殊字符

时间:2019-09-10 11:16:38

标签: mongodb

如何在特定的嵌套json对象字段中搜索任何特殊字符。我有一个存储嵌套json数据的字段。

我需要编写一个MongoDB查询来获取所有具有特殊字符的名称

学生集合:

示例:

{
_id:123
student: {
      "personalinfo":{
             "infoid": "YYY21"
             "name": "test@#!*"
                     }
         } 
}

我尝试过一些正则表达式,但不确定如何在数组元素中循环

我希望它会打印infoid和名称,在名称字段中具有特殊字符。

2 个答案:

答案 0 :(得分:0)

尝试在正则表达式下面使用,它匹配所有unicode标点和符号。

dbname.find({'student.name':{$regex:"[\p{P}\p{S}]"}})

答案 1 :(得分:0)

以下查询可以解决问题:

db.collection.distinct("student.personalinfo.name",{"student.personalinfo.name": { $not: /^[\w]+[\w ]*$/ } })

数据集:

{
    "_id" : ObjectId("5d77a5babd4e75c58d59821d"),
    "student" : {
        "personalinfo" : {
            "infoid" : "YYY21",
            "name" : "test@#!*"
        }
    }
}
{
    "_id" : ObjectId("5d77a5babd4e75c58d59821e"),
    "student" : {
        "personalinfo" : {
            "infoid" : "YYY21",
            "name" : "Bruce##"
        }
    }
}
{
    "_id" : ObjectId("5d77a5babd4e75c58d59821f"),
    "student" : {
        "personalinfo" : {
            "infoid" : "YYY21",
            "name" : "Tony"
        }
    }
}
{
    "_id" : ObjectId("5d77a5babd4e75c58d598220"),
    "student" : {
        "personalinfo" : {
            "infoid" : "YYY21",
            "name" : "Natasha"
        }
    }
}

输出:

[ "test@#!*", "Bruce##" ]