在mongo中通过php推送嵌套数组

时间:2016-02-07 16:33:08

标签: php mongodb

你好,我在mongodb中有一个像这样的文件

{
    "_id": {
        "$oid": "56b7451fa91b80e2078b4567"
    },
    "number": "222",
    "value": "hello",
    "name": "James",
    "username": "mahsa",

    "lessons": [
        {
            "id": "2",
            "time": "2016-02-11 07:15:00",
            "term": "3"
        },
        {
            "id": "3",
            "time": "2016-02-11 07:45:00",
            "term": "4"

        }
    ]
}

我想在我的文档中推送一个这样的嵌套数组,当number = 222和lessons.id = 2时

"marks": [
    {
        "id": "4",
        "value": "10",

    },
    {
        "id": "5",
        "value": "9",
    }
]

我希望我的文档像这样改变

 {
        "_id": {
            "$oid": "56b7451fa91b80e2078b4567"
        },
        "number": "222",
        "value": "hello",
        "name": "James",
        "username": "mahsa",

        "lessons": [
            {
                "id": "2",
                "time": "2016-02-11 07:15:00",
                "term": "3"
                "marks": [
                    {
                     "id": "4",
                      "value": "10",
                     },
                     {
                      "id": "5",
                      "value": "9",

                     }
                 ]
            },
            {
                "id": "3",
                "time": "2016-02-11 07:45:00",
                "term": "4"

            }
        ]
    }

但我的代码不起作用 我的代码是:

$myarray=array('$push' =>array("lessons.marks"=>array(array('id'=>'4','value'=>'10'),
   array('id'=>'5','value'=>'9') )));
$where=array('number'=>"222",'lessons.id'=>'2');
$this->collection->update($where,$myarray);

有什么问题? 我该如何解决这个问题

1 个答案:

答案 0 :(得分:0)

Mongo嵌套更新:数组数组

只需在PHP代码中进行一些更改:

$collectionObj->update(
array('number'=>'222','lessons.id'=>'2'),
array('$set'=>array(
'lessons.$.marks'=> array(
    array('id'=>'4','value'=>'10'),
    array('id'=>'5','value'=>'9')
))));

课程中。$。标记' $'在上下文中指定数组的索引.. 希望这有效..