У меня возникла проблема с изменением идентификатора MongoDB после отправки документа.
public function upsert(User $user) {
$userMongo = new UserMongo($user);
if(!$userMongo->getUuid()) {
$userMongo->setUuid(new ObjectID);
$this->collection->insertOne($userMongo);
} else {
$userMongo->setUuid(new ObjectID($userMongo->getUuid()));
$this->collection->updateOne(["_id" => $userMongo->getUuid()], ["\$set" => $userMongo]);
}
$userMongo->setUuid($userMongo->getUuid()->__toString());
return $userMongo;
}
Это должно создать новый документ из объекта php с вновь созданным objectID и вернуть объект php с созданным ObjectID. Однако это возвращает ObjectID A (т. Е. «5986c0c8e13823329a682c81») и сохраняет его как ObjectID B (т. Е. «5986c0c8e13823329a682c82»). Сохраненный ObjectID и возвращенный ObjectID немного отличаются (последняя цифра).
Почему я получаю разные ObjectID и как я могу получить ObjectID недавно созданного документа из upsert?
Задача ещё не решена.
Других решений пока нет …