mongodb如何批次修改內嵌文件的屬性?
PHPz
PHPz 2017-04-25 09:02:17
0
4
809
{
  "_id" : ObjectId("52fb2ceb1e2f8622d4228a7a"),
  "from" : 0,
  "message" : [{
      "data" : "test1",
      "status" : true,
      "time" : 1
    }, {
      "data" : "test2",
      "status" : true,
      "time" : 2
    }],
  "to" : 1,
  "type" : "s"
}

如何用一條指令把message陣列中2個物件元素中的status屬性都改成false?

是否只能在客戶端做邏輯處理:

var cursor =  db.msg.find({“to”: uid, “message.status”: false});
while(cursor.hasNext()){  //由于默认情况下find取得的游标已经做过快照,所以理论上不会影响在find之后新增的数据
    var doc = cursor.next();
    var from = doc.from;
    var type = doc.type;
        //循环对应文档的message数组中的所有元素,进行逐行更改
    item.message.foreach(function(msg){
         db.msg.update({
                “to”: uid,
                “from”: from,
                “type”: type,
                “message.time”: msg.time
            },
            {
                “$set”: {
                        “message.$.status”: true    
                    }
                }
            );
        });
}

請大家指正~~

PHPz
PHPz

学习是最好的投资!

全部回覆(4)
滿天的星座

在mongo的shell裡面也可以改呀.

Peter_Zhu
var true_metadata = db.modulestore.find({"metadata.tabs": {$exists: true}})
var updated_tabs = [];

true_metadata.forEach(function(item){
    var tabs = item.metadata.tabs
    if (item && item.metadata && tabs ){
        tabs.forEach(function(item){
            if(item.type == "wiki") {
                item.name = "资料";
            }
        })

    db.modulestore.update({"_id": item._id}, {$set: {
            "metadata.tabs": tabs 
    }})

    updated_tabs.push(tabs)
 }
})

updated_tabs

我也遇到了類似的問題,查了一下官方文檔,我本地的解決方案如上,希望幫到你

迷茫

用聚合框架aggregate做呀。先用unwind解開。再update所有的status。

phpcn_u1582

這個可以做到的, mongodb提供了一個更新內嵌資料物件的美元符號"$".
如你想要的結果, 可寫如下語句:

    db.test.update({_id:ObjectId("52fb2ceb1e2f8622d4228a7a"), "message.status":true}, 
        {$set:{"message.$.status":false}})

但這種需注意, 你的更新條件語句中需包含資料內物件的條件. 如上面的 {"messaage.status":true}, 你也可以換成其他.

可參考mongodb 文件: http://docs.mongodb.org/manual/reference/operator/update/positional/#update-documents-in-an-array

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板