Пока вижу два варианта:
1. Инкрементить id в процесе создания документа, но из-за доступа к базе большого количества людей, этот инкримент нужно держать отдельно, или вообще в Redis'e. Это боль и ненужный велосипед.
2. Новый драйвер mongo выкидывает кучу методов, в том числе после insertOne дает ->getInsertedId(). Как вариант, можно после создания документа тут же находить его и пихать в насильно созданное поле id распарсеный _id монги, но это тоже боль и дополнительный запрос-апдейт.
Может кто разобрал вариант с idAttribute: "_id" особенно при put апдейтах и delete дестроях?
Значит так.
Согласно мыслей, которые описали товарищи выше.
Исходя из условий что backEnd у нас принимающая сторона для изменений в базе и не более, то:
Backbone GET
через find() получаем стек документов, дальше через foreach пакуем каждый документ ($example) (или определенные поля) в json попутно закинув туда id которое равно $example['_id']->__toString()
Backbone POST
при создании документа есть метод получения его _id:
$example = $someCollection->insertOne(/../);
$idExample = $example->getInsertedId();
Запаковываем полученный только что $idExample в прилетевший нам json, тем же методом:
$idExample->__toString()
и отправляем json обратно на сторону backBone
Backbone PUT и DELETE
На сторону backEnd прилетает id в виде строки, перепаковываем строку в ObjectID
$input = json_decode(file_get_contents('php://input'));
$objId = new MongoDB\BSON\ObjectID($input->id);
*штатного метода не нашел
И уже по этому $objId апдейтим или удаляем документ
В принципе.. для связки костыль с нескольких строк, без дополнительных бубнов с инкрементами или дополнительными запрос-апдейт.
Вместо этого нужно создавать новый ObjectID(), и указывать его при сохранении в БД. В этом случае у вас будет финальный _id на руках до сохранения.
Незнаю что там с Backbone, но на клиент я передавал и ObjectId и DBRef как есть, и на клиенте их использовал.