![](/img/trans.png)
[英]Accessing object value from nested objects in mongodb with 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.