MongoDB之資料查詢(巢狀集合)

stonebox1122發表於2017-08-29
在MongoDB資料庫裡面每一個集合資料可以繼續儲存其他的集合資料,例如有些人員儲存家庭資訊。

範例:增加資料
db.emp.insert({"name":"林A","sex":"男","age":22,"sal":8000,"loc":"北京","course":["語文","數學","英語","音樂","政治"],"parents":[{"name":"林A父親","age":50,"job":"農民"},{"name":"林A母親","age":49,"job":"工人"}]});
db.emp.insert({"name":"林B","sex":"男","age":30,"sal":8000,"loc":"北京","course":["語文","數學"],"parents":[{"name":"林B父親","age":55,"job":"工人"},{"name":"林B母親","age":52,"job":"農民"}]});
db.emp.insert({"name":"林C","sex":"男","age":35,"sal":8000,"loc":"北京","course":["語文","數學","英語"],"parents":[{"name":"林C父親","age":60,"job":"工人"},{"name":"林C母親","age":59,"job":"職員"}]});
db.emp.insert({"name":"林D","sex":"男","age":28,"sal":8000,"loc":"北京","course":["語文","數學","政治"],"parents":[{"name":"林D父親","age":58,"job":"局長"},{"name":"林D母親","age":54,"job":"處長"}]});
db.emp.insert({"name":"林E","sex":"男","age":40,"sal":8000,"loc":"北京","course":["語文","政治"],"parents":[{"name":"林E父親","age":70,"job":"工人"},{"name":"林E母親","age":68,"job":"局長"}]});

此時的內容是巢狀的集合,而這種集合的資料的判斷只能透過“$elemMatch”來完成。

範例:查詢出父母之中有局長的資訊
> db.emp.find({"$and":[{"age":{"$gte":30}},{"parents":{"$elemMatch":{"job":"局長"}}}]}).pretty();
{
        "_id" : ObjectId("599148bf0184ff511bf02b95"),
        "name" : "林E",
        "sex" : "男",
        "age" : 40,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "政治"
        ],
        "parents" : [
                {
                        "name" : "林E父親",
                        "age" : 70,
                        "job" : "工人"
                },
                {
                        "name" : "林E母親",
                        "age" : 68,
                        "job" : "局長"
                }
        ]
}
由於這種查詢的時候條件比較麻煩,所以如果可能,儘量別搞這麼複雜。

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

相關文章