常规和嵌套数组之间的mongodb

时间:2016-02-09 14:04:18

标签: 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"
                "marks": [
                    {
                     "id": "4",
                      "value": "10",
                     },
                     {
                      "id": "5",
                      "value": "9",

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

            }
        ]
    }

我只想在我的变量完全正确的情况下推送嵌套数组:array('number'=>'222','lessons.id'=>'2','lessons.term'=>'3') 之后

"id": "2", "time": "2016-02-11 07:15:00", "term": "3" 

,但是当我使用

array('number'=>'222','lessons.id'=>'2','lessons.term'=>'4') 

 array('number'=>'222','lessons.id'=>'3','lessons.term'=>'3') 

有类似的结果 我的代码是

$this->collection->update(
array('number'=>'222','lessons.id'=>'2','lessons.term'=>'3'),
array('$push'=>array(
'lessons.$.marks'=> array(
    array('id'=>'444','value'=>'100'),
    array('id'=>'555','value'=>'90')
))));

我可以解决这个问题,或者mongo不能支持这样的事情吗?

1 个答案:

答案 0 :(得分:0)

Mongo确实支持它,你只需要使用正确的语法:

{
  'number': '222',
  'lessons': {
      '$elemMatch': {
          'id' : '3',
          'term': '3'
      }
  }
}, {
  '$push': {
    'lessons.$.marks': {
      '$each': [{
        'id': '444',
        'value': '100'
      }, {
        'id': '555',
        'value': '90'
      }]
    }
  }
}

这可能是您在PHP中所需要的:

$this->collection->update(
 array('number'=>'222',
 array('$elemMatch'=>array('lessons.id'=>'2','lessons.term'=>'3')),
    array('$push'=>array(
    'lessons.$.marks'=> array(
        '$each'=>array(
        array('id'=>'444','value'=>'100'),
        array('id'=>'555','value'=>'90')
)))));