mongodb — Moongodb-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 ????

Я хочу, чтобы данные были сохранены в этом формате

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

1

Решение

Итак, вы пытаетесь вставить тот же самый документ снова, но с той лишь разницей, что он имеет дополнительное значение в массиве бронирований?

Имейте в виду, что это не самая оптимальная вещь (если вы не должны делать это так).

В любом случае, проблема в том, что $ talent [«_ id»] уже находится в БД, поэтому при выполнении save () он обновит предыдущий документ.

Что вы должны сделать, это

insert()

но перед тем, как вам нужно удалить поле _id из $ talent, потому что вы не можете вставить два документа с одинаковым _id в mongo, для этого вы можете сделать

unset($talent["_id"])

Редактировать:

Тогда проблема в стороне php. Проверьте, выполняет ли array_push () то, что вы хотите.

Я бы сделал так:

$new_booking = array(
"booking_id" => $booking_id,
"startdate" => $startdate,
"enddate" => $startdate,
"starttime" => $starttime,
"endtime" => $endtime);

BookingArray[] = $new_booking;

Также вы пытаетесь вместо этого использовать следующий синтаксис

$mongoDb->update(array('_id'=>$talent["_id"]),array('$set'=>array('bookings'=>$BookingArray)),array('$upsert'=>true));
1

Другие решения

использование вставить () вместо спасти(). Save делает upsert:

Если объект из базы данных, обновите существующую базу данных
объект, в противном случае вставьте этот объект.

0

По вопросам рекламы [email protected]