對於一個文檔結構為:
{
"_id" : ObjectId("57133995fb5f8930d0e9b81a"),
"taskList" : [{
"taskId" : NumberLong(1),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
},{
"taskId" : NumberLong(2),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
},{
"taskId" : NumberLong(3),
"state" : "ST00",
"createTime" : ISODate("2016-04-17T07:21:58.424Z")
}]
}
taskList 長度不確定
如何批量對數組內容進行修改呢?
例如批次修改 "_id" : ObjectId("57133995fb5f8930d0e9b81a") 的 taskList 內嵌元素 的 state 欄位 為 'ST02'
@Mongoing中文社群
MongoDB 的update語句一次只能更新陣列中符合的第一個元素。幾個思路:
1) 重新建模,把tasklist 放到另外一個表裡,然後用reference來引用。如果你這種需求很多
2) 先做一次查詢得到taskList的length,然後根據這個length拼update語句:
var length = db.test.aggregate([{$project:{lenOfArray: {$size:"$taskList"}}}]).next().lenOfArray; updateObj["taskList."+ i+".stat"] = "ST02";
var updateObj = {};
for(var i =0;i
}
db.test.update({ }, {$set: updateObj } );
怎麼把大象放進冰箱? 開門 放進去 關門
一樣的 拿到這條數據 自己遍歷這個數組修改 存這條數據~
一般來說是這樣的
Mongodb目前尚不支援內嵌資料的批次修改,現在只有一條一條的取update,不過可以寫一段JS方法去封裝下
同上,採用js方法對每個doc進行修改後save,程式碼範例如下,題主需要自行測試下(在mongo shell中執行)