嗨,我正在研究mongodb php。我使用以下方法将数据插入现有文档
array_push($BookingArray, array(
"booking_id" => $booking_id,
"startdate" => $startdate,
"enddate" => $startdate,
"starttime" => $starttime,
"endtime" => $endtime));
$talent['bookings'] = $BookingArray;
$mongoDb->save($talent);
问题是当我第一次保存时,记录被正确插入,但是当第二次重新加载时,我想添加到"预订"部分,然后它正在使用新值更新以前的预订记录。
我不想这样。当第二条记录到达时,应将其添加到预订中,而不会更改以前的记录。如何使用 mongodb php 更新记录????
我希望数据以这种格式保存
..upper content(assume)...
}
}
},
"bookings": [
{
"booking_id": "5492985664363d880200002a",
"startdate": "12/01/2014",
"enddate": "12/01/2014",
"starttime": "12:30am",
"endtime": "2:00am"
},
{
"booking_id": "5192285664363f880200002a",
"startdate": "13/01/2014",
"enddate": "14/01/2014",
"starttime": "11:30am",
"endtime": "2:30am"
}
]
}
所以您正在尝试再次插入相同的文档,但唯一的区别是它在预订数组中具有额外的价值?
请注意,这不是最好的做法(除非你必须这样做(。
无论如何,问题是$talent["_id"]已经在数据库中,所以当你执行save((时,它将更新以前的文档。
你应该做的是一个
insert()
但是在您需要从$talent中删除_id字段之前,因为您无法在 MONGO 中插入两个具有相同_id的文档,为此您可以执行
unset($talent["_id"])
编辑:
那么问题出在 php 方面。检查 array_push(( 是否正在执行您希望它执行的操作。
我会这样做:
$new_booking = array(
"booking_id" => $booking_id,
"startdate" => $startdate,
"enddate" => $startdate,
"starttime" => $starttime,
"endtime" => $endtime);
BookingArray[] = $new_booking;
您也可以尝试使用以下 sintax 代替
$mongoDb->update(array('_id'=>$talent["_id"]),array('$set'=>array('bookings'=>$BookingArray)),array('$upsert'=>true));
使用 insert(( 而不是 save((。保存执行更新插入:
如果对象来自数据库,请更新现有数据库 对象,否则插入此对象。