<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                在第一章,我們介紹了 CRUD 的四分之三(create, read, update 和 delete) 操作。這章,我們來專門來討論我們跳過的那個操作:?`update`。?`Update`?有些獨特的行為,這是為什么我們把它獨立成章。 ## [](https://github.com/geminiyellow/the-little-mongodb-book/blob/master/zh-cn/mongodb.markdown#update-覆蓋還是-set)Update: 覆蓋還是 $set 最簡單的情況,?`update`?有兩個參數: 選擇器 (`where`) 和需要更新字段的內容。假設 Roooooodles 長胖了,你會希望我們這樣操作: ~~~ db.unicorns.update({name: 'Roooooodles'}, {weight: 590}) ~~~ (如果你已經把?`unicorns`?集合玩壞了,它已經不是原來的數據了的話,再執行一次?`remove`?刪除所有數據,然后重新插入第一章中所有的代碼。) 現在,如果你查一下被更新了的記錄: ~~~ db.unicorns.find({name: 'Roooooodles'}) ~~~ 你會發現?`update`?的第一個驚喜,沒找到任何文檔。因為我們指定的第二個參數沒有使用任何的更新選項,因此,它**replace**?了原始文檔。也就是說,?`update`?先根據?`name`?找到一個文檔,然后用新文檔(第二個參數)覆蓋替換了整個文檔。這和 SQL 的?`update`?命令的完全不一樣。在某些情況下,這非常理想,可以用于某些完全動態更新上。但是,如果你只希望改變一個或者幾個字段的值的時候,你應該用 MongoDB 的?`$set`?操作。繼續,讓我們來更新重置這個丟失的數據: ~~~ db.unicorns.update({weight: 590}, {$set: { name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], gender: 'm', vampires: 99}}) ~~~ 這里不會覆蓋新字段?`weight`?因為我們沒有指定它。現在讓我們來執行: ~~~ db.unicorns.find({name: 'Roooooodles'}) ~~~ 我們拿到了期待的結果。因此,在最開始的時候,我們正確的更新 weight 的方式應該是: ~~~ db.unicorns.update({name: 'Roooooodles'}, {$set: {weight: 590}}) ~~~ ## [](https://github.com/geminiyellow/the-little-mongodb-book/blob/master/zh-cn/mongodb.markdown#update-操作符)Update 操作符 除了?`$set`,我們還可以用其他的更新操作符做些有意思的事情。所有的更新操作都是對字段起作用 - 所以你不用擔心整個文檔被刪掉。比如,`$inc`?可以用來給一個字段增加一個正/負值。假設說 Pilot 獲得了非法的兩個 vampire kills 點,我們可以這樣修正它: ~~~ db.unicorns.update({name: 'Pilot'}, {$inc: {vampires: -2}}) ~~~ 假設 Aurora 忽然長牙了,我們可以給她的?`loves`?字段加一個值,通過?`$push`?操作: ~~~ db.unicorns.update({name: 'Aurora'}, {$push: {loves: 'sugar'}}) ~~~ MongoDB 手冊的?[Update Operators](http://docs.mongodb.org/manual/reference/operator/update/#update-operators)?這章,可以查到更多可用的更新操作符的信息。 ## [](https://github.com/geminiyellow/the-little-mongodb-book/blob/master/zh-cn/mongodb.markdown#upserts)Upserts 用?`update`?還有一個最大的驚喜,就是它完全支持?`upserts`。所謂?`upsert`?更新,即在文檔中找到匹配值時更新它,無匹配時向文檔插入新值,你可以這樣理解。要使用 upsert 我們需要向 update 寫入第三個參數?`{upsert:true}`。 一個最常見的例子是網站點擊計數器。如果我們想保存一個實時點擊總數,我們得先看看是否在頁面上已經有點擊記錄,然后基于此再決定執行更新或者插入操作。如果省略 upsert 選項(或者設為 false),執行下面的操作不會帶來任何變化: ~~~ db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}}); db.hits.find(); ~~~ 但是,如果我們加上 upsert 選項,結果會大不同: ~~~ db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}}, {upsert:true}); db.hits.find(); ~~~ 由于沒有找到字段?`page`?值為?`unicorns`的文檔,一個新的文檔被生成插入。當我們第二次執行這句命令的時候,這個既存的文檔將會被更新,且?`hits`?會被增加到 2。 ~~~ db.hits.update({page: 'unicorns'}, {$inc: {hits: 1}}, {upsert:true}); db.hits.find(); ~~~ ## [](https://github.com/geminiyellow/the-little-mongodb-book/blob/master/zh-cn/mongodb.markdown#批量-updates)批量 Updates 關于?`update`?的最后一個驚喜,默認的,它只更新單個文檔。到目前為止,我們的所有例子,看起來都挺符合邏輯的。但是,如果你執行一些像這樣的操作的時候: ~~~ db.unicorns.update({}, {$set: {vaccinated: true }}); db.unicorns.find({vaccinated: true}); ~~~ 你肯定會希望,你所有的寶貝獨角獸都被接種疫苗了。為了達到這個目的,?`multi`?選項需要設為 true: ~~~ db.unicorns.update({}, {$set: {vaccinated: true }}, {multi:true}); db.unicorns.find({vaccinated: true}); ~~~ ## [](https://github.com/geminiyellow/the-little-mongodb-book/blob/master/zh-cn/mongodb.markdown#小結-1)小結 本章中我們介紹了集合的基本 CRUD 操作。我們詳細講解了?`update`?及它的三個有趣的行為。 首先,如果你傳 MongoDB 一個文檔但是不帶更新操作, MongoDB 的?`update`?會默認替換現有文檔。因此,你通常要用到?`$set`?操作 (或者其他各種可用的用于修改文檔的操作)。 其次,?`update`?支持?`upsert`?操作,當你不知道文檔是否存在的時候,非常有用。 最后,默認情況下,?`update`?只更新第一個匹配文檔,因此當你希望更新所有匹配文檔時,你要用?`multi`?。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看