我在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不能支持这样的事情吗?
答案 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')
)))));