Я использую php и MongoDB, библиотека с открытым исходным кодом, которую я использую, создает автоматически сгенерированный код для вызовов mongodb. это своего рода слой ODM.
Теперь, когда я использую встроенные документы, в родительском документе мне нужно обновить набор встроенных документов, библиотека выполняет вызов, используя $unset
который согласно Документация устанавливает значение индекса в null и не удаляет его.
таким образом, теперь, когда я хочу заменить встроенный набор документов, я должен сначала удалить ($ unset) существующий набор, а затем добавить новый, оставив меня с таким результатом:
Original:
{
"parentDocument": {
"parent_id": "1",
"embeddedDocument": {
"0": {
"childValue": "0"},
"1": {
"childValue": "1"},
"2": {
"childValue": "2"}
}
}
}
Обновлено:
{
"parentDocument": {
"parent_id": "1",
"embeddedDocument": {
"0": null,
"1": null,
"2": {
"childValue": "2"}
}
}
}
Как я могу очистить эти данные из БД?
Я перепробовал много форумов, не нашел ни одного действующего решения для того же.
Мне нужно очистить эти полные данные. Спасибо
Вы должны были использовать $pull
вместо $unset
,
$unset
установит элементы равными нулю внутри массивов
$pull
удалит элементы из массивов
Вы можете удалить нулевые элементы, используя $pull:{'a.b':null}
Других решений пока нет …