Mongodb-PHP:如何在现有文档中插入新记录

时间:2014-12-18 18:16:44

标签: php mongodb mongodb-php

您好我正在使用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 up?记录????

我希望以这种格式保存数据

    ..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"
 }
 ]
}

2 个答案:

答案 0 :(得分:1)

所以你试图再次插入相同的文档,但唯一的区别是它在预订数组中有额外的值?

请注意,这不是最佳选择(除非您必须这样做)。

无论如何,问题是$ 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));

答案 1 :(得分:0)

使用insert()代替save()。保存做了一件事:

  

如果对象来自数据库,请更新现有数据库   对象,否则插入此对象。