Moongodb-PHP:如何在现有文档中更新新记录


Moongodb-PHP:How to upsert the new record in the existing document

嗨,我正在研究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((。保存执行更新插入:

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