cari

Rumah  >  Soal Jawab  >  teks badan

mongodb 内嵌数组 批量修改问题

对于一个文档结构为:

{
  "_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中文社区

曾经蜡笔没有小新曾经蜡笔没有小新2757 hari yang lalu994

membalas semua(4)saya akan balas

  • 習慣沉默

    習慣沉默2017-05-02 09:21:52

    Pernyataan kemas kini MongoDB hanya boleh mengemas kini elemen padanan pertama dalam tatasusunan pada satu masa. Beberapa idea:

    1) Model semula, letakkan senarai tugas ke dalam jadual lain, dan kemudian gunakan rujukan untuk merujuknya. Jika anda mempunyai banyak keperluan

    2) Mula-mula lakukan pertanyaan untuk mendapatkan panjang Senarai tugas, dan kemudian eja pernyataan kemas kini berdasarkan panjang ini:

    var length = db.test.aggregate([{$project:{lenOfArray: {$size:"$taskList"}}}]).next().lenOfArray;
    var updateObj = {};
    untuk(var i=0;i<length;i++){
    updateObj["taskList."+ i+".stat"] = "ST02";
    }
    db.test.update( { }, {$set: updateObj } );

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-05-02 09:21:52

    Bagaimana untuk meletakkan gajah di dalam peti sejuk? Buka pintu, masukkannya, tutup pintu
    Sama seperti ini, lalui tatasusunan ini dan ubah suai sendiri ~
    Secara umumnya, ia adalah seperti ini

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:21:52

    Mongodb pada masa ini tidak menyokong pengubahsuaian kelompok data terbenam Pada masa ini, ia hanya mengemas kini satu demi satu, tetapi anda boleh menulis kaedah JS untuk merangkumnya

    balas
    0
  • 習慣沉默

    習慣沉默2017-05-02 09:21:52

    Sama seperti di atas, gunakan kaedah js untuk mengubah suai setiap dokumen dan simpannya Contoh kod adalah seperti berikut

    changeState = function(doc){
        taskList = doc.taskList;
        for(var i in taskList){
            taskList[i].state = 'ST02';
        }
        db.test.save(doc)
    }
     db.test.find({"_id" : ObjectId("57133995fb5f8930d0e9b81a")}).forEach(changeState)
     
     
     

    balas
    0
  • Batalbalas