Меня беспокоит использование $ pop для удаления элементов массива (внедренного документа) в mongodb по двум основным причинам:
- Я не знаю, является ли порядок массива статическим,Возможно ли возвращение / сохранение массива в другом порядке?
- Что, если другой пользователь удалит индекс со значением меньше или равно перед тем, как удалить мой?Это может привести к удалению неверных данных.
Я знаю, что могу использовать $ pull, но проблема в том, что мне, возможно, придется использовать весь встроенный объект для criterea, я хочубыть в состоянии использовать некоторый вид идентификатора «достаточно уникален» (это может быть совсем другой вопрос) для использования при работе с внедренными объектами, и его положение в массиве представляется логичным выбором.
Если это действительно «небезопасно»чтобы использовать $ pop, я подумал о двух возможных решениях для «достаточно уникального» идентификатора.
- Добавить новый экземпляр MongoId к каждому встроенному объекту во время вставки.Проблема с этим теперь заключается в том, что функция $ set не вставляет дублирующую запись.Вам нужно будет проверить наличие дубликатов перед вставкой.
- json_encode новой записи, затем md5 хэширует эту строку json.Это может быть лучшим решением, поскольку оно гарантирует, что идентификатор уникален для этой записи, но если вы попытаетесь вставить ту же запись, она действительно останется такой же, поэтому $ set проигнорирует ее.
Итак, я думаю, что мой вопрос состоит из двух частей: безопасно ли использовать $ pop при удалении элементов из массива.Если нет, то как лучше всего добавлять достаточно уникальные идентификаторы во встроенные документы?
(может иметь значение, а может и не иметь значения, что я использую PHP)