中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

MongoDB文檔的更新(php代碼實(shí)例)

MongoDB更新文檔分為兩大類:

成都創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為諸暨企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作諸暨網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

文檔替換,使用新文檔完全替換掉舊文檔

修改器,修改部分文檔

文檔替換

使用文檔替換非常的簡單,下面來看演示:

$collect->insertOne(['name' => 'lakers', 'nums'=> 16]);
$collect->replaceOne(
    ['name'=>'lakers'], 
    ['name' => 'heat', 'nums'=>3]
);

使用修改器可以完成更復(fù)雜的更新操作,比如修改、增加或刪除鍵。

"$set"修改器

"$set"用來指定一個(gè)字段的值。如果這個(gè)字段不存在,則創(chuàng)建它。

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
]);

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'apple']]
);
// fruit字段不存在,則會(huì)創(chuàng)建該字段

如果現(xiàn)在不喜歡apple,想換成草莓

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'strawberry']]
);

"$set"還可以修改鍵的類型。

# 不止喜歡草莓,還喜歡梨子、香蕉。
$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['fruit' => 
            ['strawberry', 'banana', 'pear'] 
        ]
    ]
);

"$set"也可以修改內(nèi)嵌文檔

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
    'brothers' => ['name' => 'wade', 'age'=> 38]
]);

$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['brothers.name' => 'paul']
    ]
);

"$unset"修改器

使用"$unset"修改器可以刪除指定字段

$collect->updateOne(['name'=>'james'],
    ['$unset' =>
        ['brothers' => '']
    ]
);

"$inc"修改器,增加或減少數(shù)值

和"$set"修改器一樣,如果該字段不存在則自動(dòng)創(chuàng)建。注意:該字段值只可以是數(shù)字。

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 61]
    ]
);
## 現(xiàn)有積分61

現(xiàn)在,有獲得了10點(diǎn)積分。

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 10]
    ]
);
## 現(xiàn)有積分71

后來,用掉了50積分

$collect->updateOne(['name'=>'james'],
     ['$inc' =>['scores' => -50]
 ] ); 
 ## 現(xiàn)有積分21

數(shù)組修改器

MongoDB針對(duì)數(shù)組提供了專門的修改方法。

"$push"添加元素

"$push"可以往數(shù)組里添加元素,如果該數(shù)組不存在,則會(huì)自動(dòng)創(chuàng)建數(shù)組?,F(xiàn)在有一個(gè)文檔用于保存文章數(shù)據(jù):

$collect->insertOne([
     '_id' => 1,     'title'=>'study mongodb',     'create_time' => '2020-08-24 12 :31' 
]); 
$push = ['$push' => ['comments' => 'comments1'] ]; 
$collect->updateOne(['_id' => 1 ], $push);

"$each"添加多個(gè)元素

'$push'可以一次數(shù)組元素,如果想一次添加多個(gè)元素的話,則需要搭配使用'$each'。

$push = [   '$push' => 
         ['comments' => 
             ['$each' => ['comment1', 'comment2', 'comment3']]
         ] 
      ]; 
$collect->updateOne(['_id' => 1 ], $push);

"$slice"保留n個(gè)元素

'$push'和'$slicet'配合使用,保留最新的n條數(shù)據(jù),'$slice'的值只能是負(fù)整數(shù)。比如,我只想保留最新的3條評(píng)論:

# 目前數(shù)據(jù)如下
 > db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment1", "comment2", "comment3", "comment4", "comment5", "comment6" ] }
$push = [
     '$push' => [ 
        'comment' => [ 
            '$each' => ['comment7', 'comment8', 'comment9'],                                '$slice' => -3 
        ],
     ], 
]; 
$collect->updateOne(['_id' => 1 ], $push);
# 現(xiàn)數(shù)據(jù)如下 
db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ "comment7", "comment8", "comment9" ] }

"$sort"排序

還可以配合'$sort'使用,保留點(diǎn)贊數(shù)最多的3條評(píng)論。

# 目前是集合內(nèi)是空的,么有任何文檔
$collect->insertOne(['_id' => 1, 'title'=>'study mongodb', 'create_time' => '2020-08-24 12:31']);
$push = [
    '$push' => [
        'comment' => [
            '$each' => [
                ['comment' => 'php', 'like' => 100], 
                ['comment' => 'mysql', 'like' => 10], 
                ['comment' => 'linux', 'like' => 200], 
                ['comment' => 'java', 'like' => 1000], 
                ['comment' => 'nginx', 'like' => 300], 
                ['comment' => 'composer', 'like' => 500], 
            ],
            '$slice' => -3,
            '$sort' => ['like' => 1]
        ],
    ],
];

再來看看集合內(nèi)數(shù)據(jù)是怎樣的:

> db.users.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2020-08-24 12:31", "comment" : [ { "comment" : "nginx", "like" : 300 }, { "comment" : "composer", "like" : 500 }, { "comment" : "java", "like" : 1000 } ] }

注意不能只將 "$slice" 或者 "$sort" 與 "$push" 配合使用,且必須使用 "$each"。

"$addToSet"避免插入重復(fù)數(shù)據(jù)

使用"$addToSet"新增數(shù)組元素時(shí),可以避免添加重復(fù)數(shù)據(jù),比如

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

$update = [
    '$addToSet' => [
        'fruits' => 'apple'
    ]
];

上面的修改不會(huì)成功,因?yàn)閍pple已經(jīng)存在。'$addToSet'也可以和"$each"配合使用,插入多個(gè)數(shù)組元素。

$update = [
    '$addToSet' => [
        'fruits' => [
            '$each' => ['apple', 'banana', 'orange']
        ]
    ]
];
$collect->updateOne(['_id' => 1], $update);

刪除元素

可以通過"$pop",刪除最左端或最右端的元素。

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

#從數(shù)組末刪除1個(gè)元素
$update = [
    '$pop' => [
        'fruits' => 1
    ]
];
$collect->updateOne(['_id' => 1], $update);

# 從數(shù)組頭刪除一個(gè)元素
$update = [
    '$pop' => [
        'fruits' => -1
    ]
];
$collect->updateOne(['_id' => 1], $update);

還可以通過'$pull'刪除指定的元素

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear', 'apple', 'banana', 'orange']
]);

#從數(shù)組末刪除
$update = [
    '$pull' => [
        'fruits' => 'apple'
    ]
];

數(shù)組有所有apple元素都被刪除了

upsert

upsert是一種特殊的更新。但找到符合條件的集合,那么和之前的修改時(shí)一樣的。若沒有找到符合條件的集合,那么它就會(huì)以查詢條件以及修改的文檔作為一個(gè)新文檔插入到集合中。

下面,以一個(gè)我們經(jīng)常碰到的場景來舉例——記錄每個(gè)ip瀏覽的次數(shù)。若是新的ip,則新增到集合中,若已存在,就修改原有集合。

$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);

$collect->updateOne(['ip' => '127.0.0.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);


$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);
> db.users.find()
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2df"), "ip" : "116.31.23.1", "views" : 2 }
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2e1"), "ip" : "127.0.0.1", "views" : 1 }

更新多個(gè)文檔

更新多個(gè)文檔需要使用updateMany()方法,演示如下:

$collect->insertMany([
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
]);

$collect->updateMany([
    'name' => 'gwx'
],
    ['$set' =>['age' => 18]]
);

文章名稱:MongoDB文檔的更新(php代碼實(shí)例)
標(biāo)題路徑:http://www.rwnh.cn/article46/cjooeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站收錄網(wǎng)站排名、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
谷城县| 绥宁县| 大新县| 沅陵县| 黄大仙区| 蒙阴县| 荆州市| 北京市| 察哈| 克山县| 阿瓦提县| 石城县| 什邡市| 临江市| 宜川县| 鹤庆县| 常山县| 嘉定区| 大兴区| 河源市| 徐闻县| 石河子市| 图片| 弋阳县| 桑植县| 富宁县| 沁源县| 兰溪市| 育儿| 洪泽县| 禹州市| 邛崃市| 丽江市| 莫力| 莒南县| 荆州市| 乡城县| 英吉沙县| 潮州市| 河北省| 康定县|