繁体   English   中英

在第三个嵌套对象数组 mongodb 和 php 中设置值

[英]set value in third nested array of objects mongodb and php

我有以下 mongodb 文档的结构:

[{
  "_id": {
    "$oid": "5fca578a983edc31764f80d2"
  },
  "class_name": "Class 1",
  "meeting": [
    {
      "id": "1641278777739",
      "teacher_id": "5fca5769c4e2e859c71c7de2",
      "teacher_name": "Mrs. Miller",
      "dates": [
        {
          "id": 1641377951854,
          "meeting": "2022-01-7 1:08:00",
          "student_id": null,
          "student": null
        },
        {
          "id": 1641377970597,
          "meeting": "2022-01-26 11:19:00",
          "student_id": null,
          "student": null
        }
        
      ]
    }
  ]
}]

我有在会议数组中的 object 的 id 和在会议内部的日期 object 的 id。 我想在dates中设置 student_id 的值,我使用的是 mongodb 和 mongodb php 客户端。 我怎么能这样做? 谢谢

您可以做什么,遍历您的数组并使用 arrays 键设置 student_id 值:

$studentId = 'test';

$arrays = json_decode('[{
  "_id": {
    "$oid": "5fca578a983edc31764f80d2"
  },
  "class_name": "Class 1",
  "meeting": [
    {
      "id": "1641278777739",
      "teacher_id": "5fca5769c4e2e859c71c7de2",
      "teacher_name": "Mrs. Miller",
      "dates": [
        {
          "id": 1641377951854,
          "meeting": "2022-01-7 1:08:00",
          "student_id": null,
          "student": null
        },
        {
          "id": 1641377970597,
          "meeting": "2022-01-26 11:19:00",
          "student_id": null,
          "student": null
        }
        
      ]
    },
        {
      "id": "1641278777740",
      "teacher_id": "5fca5769c4e2e859c71cffff",
      "teacher_name": "Mrs. Jones",
      "dates": [
        {
          "id": 1641377951854,
          "meeting": "2022-01-7 1:08:00",
          "student_id": null,
          "student": null
        },
        {
          "id": 1641377970597,
          "meeting": "2022-01-26 11:19:00",
          "student_id": null,
          "student": null
        }
        
      ]
    }
  ]
}]', true);
foreach ($arrays as $arrkey => $array) {
    foreach($array['meeting'] as $meetkey => $meeting) {
        foreach($meeting['dates'] as $datekey => $date) {
            $arrays[$arrkey]['meeting'][$meetkey]['dates'][$datekey]['student_id'] = $studentId;
        }
    }
}

echo '<pre>';
var_dump($arrays);
echo '</pre>';

这输出:

<pre>array(1) {
  [0]=>
  array(3) {
    ["_id"]=>
    array(1) {
      ["$oid"]=>
      string(24) "5fca578a983edc31764f80d2"
    }
    ["class_name"]=>
    string(7) "Class 1"
    ["meeting"]=>
    array(2) {
      [0]=>
      array(4) {
        ["id"]=>
        string(13) "1641278777739"
        ["teacher_id"]=>
        string(24) "5fca5769c4e2e859c71c7de2"
        ["teacher_name"]=>
        string(11) "Mrs. Miller"
        ["dates"]=>
        array(2) {
          [0]=>
          array(4) {
            ["id"]=>
            int(1641377951854)
            ["meeting"]=>
            string(17) "2022-01-7 1:08:00"
            ["student_id"]=>
            string(4) "test"
            ["student"]=>
            NULL
          }
          [1]=>
          array(4) {
            ["id"]=>
            int(1641377970597)
            ["meeting"]=>
            string(19) "2022-01-26 11:19:00"
            ["student_id"]=>
            string(4) "test"
            ["student"]=>
            NULL
          }
        }
      }
      [1]=>
      array(4) {
        ["id"]=>
        string(13) "1641278777740"
        ["teacher_id"]=>
        string(24) "5fca5769c4e2e859c71cffff"
        ["teacher_name"]=>
        string(10) "Mrs. Jones"
        ["dates"]=>
        array(2) {
          [0]=>
          array(4) {
            ["id"]=>
            int(1641377951854)
            ["meeting"]=>
            string(17) "2022-01-7 1:08:00"
            ["student_id"]=>
            string(4) "test"
            ["student"]=>
            NULL
          }
          [1]=>
          array(4) {
            ["id"]=>
            int(1641377970597)
            ["meeting"]=>
            string(19) "2022-01-26 11:19:00"
            ["student_id"]=>
            string(4) "test"
            ["student"]=>
            NULL
          }
        }
      }
    }
  }
}
</pre>

直接在循环中操作数组的另一种方法是在数组前面使用& 引用

foreach ($arrays as &$array) {
    foreach($array['meeting'] as &$meeting) {
        foreach($meeting['dates'] as &$date) {
            $date['student_id'] = $studentId;
        }
    }
}
unset($array);

mongo shell JS版本:

 db.collection.update({},
 {
  $set: {
    "meeting.$[m].dates.$[k].student_id": "value"
  }
 },
{
   arrayFilters: [
     {
       "m.id": "1641278777739"
    },
    {
       "k.id": 1641377970597
    }
  ]
})

解释:您使用两个 arrayFilters 到 select 确切的嵌套 object 在您的情况下,您将使用新值更新 student_id 键... javascript 操场

php 版本:

  $db->collection->update([],['$set'=>["meeting.$[m].dates.$[k].student_id" => "value" ]],['arrayFilters'=>  [ "m.id"=> "1641278777739" , "k.id"=>1641377970597] ] );
  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM