mongodb如何批量修改内嵌文档的属性?
PHPz
PHPz 2017-04-25 09:02:17
0
4
787
{
  "_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

学习是最好的投资!

membalas semua(4)
滿天的星座

Anda juga boleh menukarnya dalam cangkerang mongo.

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

Saya juga menghadapi masalah yang sama. Saya menyemak dokumentasi rasmi saya adalah seperti di atas

迷茫

Gunakan agregat rangka kerja pengagregatan untuk melakukannya. Bersantai dahulu dengan berehat. Kemudian kemas kini semua status.

phpcn_u1582

Ini boleh dilakukan, mongodb menyediakan tanda dolar "$" untuk mengemas kini objek data terbenam.
Jika anda mahukan hasilnya, anda boleh menulis pernyataan berikut:

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

Tetapi sila ambil perhatian bahawa kenyataan bersyarat kemas kini anda mesti menyertakan keadaan objek dalam data Contohnya, {"messaage.status":true} di atas, anda juga boleh menukarnya kepada sesuatu yang lain.

Sila rujuk dokumentasi mongodb: http://docs.mongodb.org/manual/reference/operator/update/positional/#update-documents-in-an-array

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan