溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB之數(shù)據(jù)更新(修改器)

發(fā)布時間:2020-08-04 21:03:31 來源:ITPUB博客 閱讀:172 作者:stonebox1122 欄目:關系型數(shù)據(jù)庫
MongoDB數(shù)據(jù)庫而言,數(shù)據(jù)的修改會牽扯到內(nèi)容的變更,結構的變更(包含有數(shù)組)。所以在進行MongoDB設計的時候就提供有一系列修改器的應用。之前使用的“$set”就是一個修改器。

1、$inc:主要針對于一個數(shù)字字段,增加某個數(shù)字字段的數(shù)據(jù)內(nèi)容:
語法:{"$inc":{"成員":"內(nèi)容"}}
范例:將年齡為30歲的一個員工的薪水一律1000,年齡加1歲
> db.emp.update({"age":30},{"$inc":{"sal":-1000,"age":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":31}).pretty();
{
        "_id" : ObjectId("599108423268c8e84253be26"),
        "name" : "趙一",
        "sex" : "男",
        "age" : 31,
        "sal" : 8999,
        "loc" : "北京"
}

2、$set:進行內(nèi)容的重新設置:
語法:{"$set":{"成員":"新內(nèi)容"}}
范例:將年齡是30歲的某個人員的薪水修改為7999
> db.emp.update({"age":30},{"$set":{"sal":7999}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":30}).pretty();
{
        "_id" : ObjectId("599108423268c8e84253be29"),
        "name" : "李四",
        "sex" : "女",
        "age" : 30,
        "sal" : 7999,
        "loc" : "北京"
}

3、$unset:刪除某個成員的內(nèi)容:
語法:{"$unset":{"成員":1}}
范例:刪除“孫三”的年齡和薪水信息
> db.emp.find({"name":"孫三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孫三",
        "sex" : "男",
        "age" : 40,
        "sal" : 2000,
        "loc" : "深圳"
}
> db.emp.update({"name":"孫三"},{"$unset":{"age":1,"sal":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孫三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孫三",
        "sex" : "男",
        "loc" : "深圳"
}

4、$push:相當于將內(nèi)容追加到指定的成員之中(基本上是數(shù)組):
語法:{"$push":{"成員":value}}
范例:向“孫三”添加2門課程信息(此時孫三信息下沒有course信息)
> db.emp.update({"name":"孫三"},{"$push":{"course":["語文","數(shù)學"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孫三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孫三",
        "sex" : "男",
        "loc" : "深圳",
        "course" : [
                [
                        "語文",
                        "數(shù)學"
                ]
        ]
}

范例:向“李四”添加一門課程信息(此時李四信息下沒有course信息)
> db.emp.update({"name":"李四"},{"$push":{"course":"語文"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"李四"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be29"),
        "name" : "李四",
        "sex" : "女",
        "age" : 30,
        "sal" : 7999,
        "loc" : "北京",
        "course" : [
                "語文"
        ]
}

范例:向“劉A”的課程追加一個“美術”
> db.emp.find({"name":"劉A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數(shù)學",
                "英語",
                "音樂",
                "政治"
        ]
}
> db.emp.update({"name":"劉A"},{"$push":{"course":"美術"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"劉A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數(shù)學",
                "英語",
                "音樂",
                "政治",
                "美術"
        ]
}

就是進行數(shù)組數(shù)據(jù)的添加操作使用的。如果沒有數(shù)組則進行新的數(shù)組的創(chuàng)建,如果有則進行內(nèi)容的增加。

5、$pushAll:與“$push”是類似的,可以一次追加多個內(nèi)容到數(shù)組里面:
語法:{"$pushAll":{"成員":數(shù)組內(nèi)容}}
范例:向"周五"里面添加多個課程內(nèi)容
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京"
}
> db.emp.update({"name":"周五"},{"$pushAll":{"course":["美術","音樂"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "美術",
                "音樂"
        ]
}

6、$addToSet:向數(shù)組里面增加一個新的內(nèi)容,只有這個內(nèi)容不存在的時候才會增加
語法:{"$addToSet":{成員:內(nèi)容}}
范例:向“周五”的信息增加新的內(nèi)容
> db.emp.update({"name":"周五"},{"$addToSet":{"course":"舞蹈"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "美術",
                "音樂",
                "舞蹈"
        ]
}
此時會判斷要增加的內(nèi)容在數(shù)組里面是否存在,如果不存在則向數(shù)組之中追加內(nèi)容,如果存在則不做任何修改操作。

7、$pop:刪除數(shù)組內(nèi)的數(shù)據(jù)
語法:{"$pop":{成員:內(nèi)容}},內(nèi)容如果設置為-1表示刪除第一個,如果內(nèi)容設置為1表示刪除最后一個
范例:刪除周五的第一個課程
> db.emp.update({"name":"周五"},{"$pop":{"course":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "音樂",
                "舞蹈"
        ]
}

范例:刪除周五的最后一個課程
> db.emp.update({"name":"周五"},{"$pop":{"course":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [
                "音樂"
        ]
}

8、$pull:從數(shù)組內(nèi)刪除一個指定內(nèi)容的數(shù)據(jù)
語法:{"$pull":{成員:數(shù)據(jù)}},進行數(shù)據(jù)比對的,如果是此數(shù)據(jù)是刪除
范例:刪除王五的音樂課程信息
> db.emp.update({"name":"周五"},{"$pull":{"course":"音樂"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be2a"),
        "name" : "周五",
        "sex" : "女",
        "age" : 30,
        "sal" : 9999,
        "loc" : "北京",
        "course" : [ ]
}

9、$pullAll:一次性刪除多個內(nèi)容
語法:{"$pullAll":{成員:[數(shù)據(jù),數(shù)據(jù),...]}}
范例:刪除“劉A”中的三門課程
> db.emp.find({"name":"劉A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "語文",
                "數(shù)學",
                "英語",
                "音樂",
                "政治",
                "美術"
        ]
}
> db.emp.update({"name":"劉A"},{"$pullAll":{"course":["語文","數(shù)學","英語"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"劉A"}).pretty()
{
        "_id" : ObjectId("599129a00184ff511bf02b87"),
        "name" : "劉A",
        "sex" : "男",
        "age" : 35,
        "sal" : 8000,
        "loc" : "北京",
        "course" : [
                "音樂",
                "政治",
                "美術"
        ]
}

10、$rename:為成員名稱重命名
語法:{"$rename":{舊的成員名稱:新的成員名稱}}
范例:將“孫三”的name成員名稱修改為“姓名”
> db.emp.find({"name":"孫三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "name" : "孫三",
        "sex" : "男",
        "loc" : "深圳",
        "course" : [
                [
                        "語文",
                        "數(shù)學"
                ]
        ]
}
> db.emp.update({"name":"孫三"},{"$rename":{"name":"姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"姓名":"孫三"}).pretty()
{
        "_id" : ObjectId("599108423268c8e84253be28"),
        "sex" : "男",
        "loc" : "深圳",
        "course" : [
                [
                        "語文",
                        "數(shù)學"
                ]
        ],
        "姓名" : "孫三"
}

在整個MongoDB數(shù)據(jù)庫里面,提供的修改器的支持很全面。
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI