Я столкнулся с этой проблемой и обошел ее, запросив _id после upsert.Я подумал, что добавлю некоторые из моих выводов на случай, если они будут полезны всем, кто приходит сюда в поисках информации.
Когда в результате упорядочения создается новый документ в коллекции, возвращаемый объект содержит_id (вот пример print_r):
Array
(
[updatedExisting] => 0
[upserted] => MongoId Object
(
[$id] => 506dc50614c11c6ebdbc39bc
)
[n] => 1
[connectionId] => 275
[fsyncFiles] => 7
[err] =>
[ok] => 1
)
Вы можете получить _id из этого:
$id = (string)$obj['upserted'];
Однако, если в результате выполнения обновления существующий документ был обновлен,возвращаемый объект не содержит _id.