MongoDB之資料查詢(正規表示式)

stonebox1122發表於2017-08-24
如果要想實現模糊查詢,那麼必須使用正規表示式,使用的是與Perl相容的正規表示式的形式。
如果要想實現正規表示式,則按照如下的定義格式:
  ● 基礎語法:{key:正規表示式};
  ● 完整語法:{key:{"$regex":正則標記,"$options":選項}}。
對於options主要是設定正則的資訊查詢的標記:
  ● “i”:忽略字母大小寫,最常用;
  ● “m”:多行查詢;
  ● “x”:空白字串除了被轉義的或在字元類中以外的完全被忽略;
  ● “s”:匹配所有的字元(“.”),包含換行內容。
需要注意的是,如果是直接使用,那麼只能夠使用i和m,而“x”和“s”必須使用"$regex”

範例:查詢以“王”開頭的人員資訊
> db.emp.find({"name":/王/}).pretty();
{
        "_id" : ObjectId("599108433268c8e84253be2d"),
        "name" : "王八",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京"
}

範例:查詢姓名有字母a的人員資訊
> db.emp.find({"name":/a/i}).pretty();
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數學",
                "英語",
                "音樂",
                "政治"
        ]
}
{
        "_id" : ObjectId("599148bd0184ff511bf02b91"),
        "name" : "林A",
        "sex" : "男",
        "age" : 22,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數學",
                "英語",
                "音樂",
                "政治"
        ],
        "parents" : [
                {
                        "name" : "林A父親",
                        "age" : 50,
                        "job" : "農民"
                },
                {
                        "name" : "林A母親",
                        "age" : 49,
                        "job" : "工人"
                }
        ]
}

如果要執行模糊查詢的操作,嚴格來講只需要編寫一個關鍵字就夠了。

> db.emp.find({"name":{"$regex":/a/i}}).pretty();
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數學",
                "英語",
                "音樂",
                "政治"
        ]
}
{
        "_id" : ObjectId("599148bd0184ff511bf02b91"),
        "name" : "林A",
        "sex" : "男",
        "age" : 22,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數學",
                "英語",
                "音樂",
                "政治"
        ],
        "parents" : [
                {
                        "name" : "林A父親",
                        "age" : 50,
                        "job" : "農民"
                },
                {
                        "name" : "林A母親",
                        "age" : 49,
                        "job" : "工人"
                }
        ]
}

正則操作之中除了可以查詢出單個欄位的內容之外,也可以進行陣列資料的查詢。

範例:查詢陣列資料
> db.emp.find({"course":/語/i}).pretty();
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數學",
                "英語",
                "音樂",
                "政治"
        ]
}

MongoDB中的正則符號和之前Java正則是由一些小小差別,不建議使用以前的一些標記,正則就將其應用在模糊資料的查詢上。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2144092/,如需轉載,請註明出處,否則將追究法律責任。

相關文章