日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MongoDB原子操作
維護原子性的推薦方法是保留所有相關(guān)信息,并將這些信息使用嵌入式文檔的形式更新到文檔中,這將確保單個文檔的所有更新都是原子的。假設(shè)我們已經(jīng)創(chuàng)建了一個名為 productDetails 的集合,并在其中插入了一個文檔,如下所示:

站在用戶的角度思考問題,與客戶深入溝通,找到碭山網(wǎng)站設(shè)計與碭山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋碭山地區(qū)。

> db.productDetails.insert(
... {
... "product_name": "Samsung S3",
... "category": "mobiles",
... "product_total": 5,
... "product_available": 3,
... "product_bought_by": [
... {
... "customer": "john",
... "date": "7-Jan-2014"
... },
... {
... "customer": "mark",
... "date": "8-Jan-2014"
... }
... ]
... }
... )
WriteResult({ "nInserted" : 1 })

在上面的文檔中,我們將購買產(chǎn)品的客戶的信息嵌入到 product_bought_by 字段中。當(dāng)有新客戶購買該產(chǎn)品時,我們首先會使用 product_available 字段檢查該產(chǎn)品是否仍然可用。如果可用,我們就減少 product_available 字段的值,并在 product_bought_by 字段中插入新客戶的信息。

我們可以使用 findAndModify 命令來實現(xiàn)上述功能,如下所示:

> db.productDetails.findAndModify({query:{_id:ObjectId("603f31435e514debed504a38"), product_available:{$gt:0}}, update:{$inc:{product_available:-1}, $push:{product_bought_by:{customer:"rob", date:"9-Jan-2014"}}}})
{
        "_id" : ObjectId("603f31435e514debed504a38"),
        "product_name" : "Samsung S3",
        "category" : "mobiles",
        "product_total" : 5,
        "product_available" : 3,
        "product_bought_by" : [
                {
                        "customer" : "john",
                        "date" : "7-Jan-2014"
                },
                {
                        "customer" : "mark",
                        "date" : "8-Jan-2014"
                }
        ]
}

上面的示例中我們使用 findAndModify 來查詢并更新文檔,這樣可以確保只有在產(chǎn)品可用時才更新產(chǎn)品購買信息。而且整個過程都在同一個查詢中完成。

與此相反,假如我們將產(chǎn)品的可用性信息與購買記錄分開保存,那么在上面的示例中我們需要先使用一個查詢來檢查產(chǎn)品是否可用,然后再通過另一個查詢來更新購買信息。但是,在執(zhí)行這兩個查詢的過程中,可能有其他的用戶購買了該產(chǎn)品,導(dǎo)致該產(chǎn)品不可用。在不知道這一點的情況下,我們的第二個查詢將根據(jù)第一個查詢的結(jié)果更新購買信息,這就會導(dǎo)致兩個文檔中的數(shù)據(jù)不一致。

常用的原子操作命令

$set

用來指定一個鍵并更新鍵值,若鍵不存在則創(chuàng)建。

{ $set : { field : value } }

$unset

用來刪除一個鍵。

{ $unset : { field : 1} }

$inc

用來對文檔的某個數(shù)值類型的鍵值進行增減操作。

{ $inc : { field : value } }

$push

用來向文檔中追加一些信息。

{ $push : { field : value } }

把 value 追加到 field 里面去,field 一定要是數(shù)組類型才行,如果 field 不存在,則會新增一個數(shù)組類型加進去。

$pushAll

與 $push 類似,它可以一次追加多個值到一個數(shù)組類型的字段內(nèi)。

{ $pushAll : { field : value_array } }

$pull

從數(shù)組 field 內(nèi)刪除一個等于 value 的值。

{ $pull : { field : _value } }

$pop

刪除數(shù)組的第一個或最后一個元素。

{ $pop : { field : 1 } }

$rename

修改字段的名稱。

{ $rename : { old_field_name : new_field_name } }

$bit

位操作,integer 類型。

{$bit : { field : {and : 5}}}

偏移操作符

> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 3 }, { "by" : "jane", "votes" : 7 } ] }
> t.update( {'comments.by':'joe'}, {$inc:{'comments.$.votes':1}}, false, true )
> t.find() { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : "ABC", "comments" : [ { "by" : "joe", "votes" : 4 }, { "by" : "jane", "votes" : 7 } ] }


文章名稱:MongoDB原子操作
文章出自:http://www.5511xx.com/article/cochjoe.html