Привет, я работаю над 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()
но перед тем, как вам нужно удалить поле _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));
использование вставить () вместо спасти(). Save делает upsert:
Если объект из базы данных, обновите существующую базу данных
объект, в противном случае вставьте этот объект.