鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)  HTML/ MongoDB嵌套文檔如何局部更新

MongoDB嵌套文檔如何局部更新

MongoDB中,有如下的一條數(shù)據(jù),我想修改,workerStats.stage=LABEL and workerStats.idOfWorker=adminstats里面的labeledItems,使其自增1。

{
    "_id" : ObjectId("5ac1ff4c87c0fc67c0f4fe60"),
    "_class" : "com.JobEntity",
    "workerStats" : [ 
        {
            "idOfWorker" : "admin",
            "stage" : "LABEL",
            "stats" : {
                "totalItems" : 0,
                "labeledItems" : 0,
                "submittedItems" : 0
            }
        }, 
        {
            "idOfWorker" : "lgh",
            "stage" : "REVIEW",
            "stats" : {
                "totalItems" : 0,
                "labeledItems" : 0,
                "submittedItems" : 0
            }
        }
    ]
}

我的修改語(yǔ)句如下:

db.job.updateOne(
{
    "_id": ObjectId("5ac1ff4c87c0fc67c0f4fe60"),
    "workerStats.stage": "LABEL",
    "workerStats.idOfWorker": "admin"
},
{
    $inc: {
        "workerStats.$.stats.labeledItems": 1
    }
}
)

但是并不起作用,請(qǐng)問(wèn)應(yīng)該如何修改?

回答
編輯回答
萌小萌

$elemMatch才是代表使用同一個(gè)數(shù)組元素同時(shí)匹配多個(gè)條件。否則可能是多個(gè)數(shù)組元素匹配不同的條件,$也就沒(méi)有意義了。

db.test.updateOne(
{
    _id: ObjectId("5ac1ff4c87c0fc67c0f4fe60"),
    workerStats: {
        $elemMatch: {
            stage: "LABEL",
            idOfWorker: "admin"
        }
    }
},
{
    $inc: {
        "workerStats.$.stats.labeledItems": 1
    }
})
2017年3月30日 21:03