У меня есть такие документы
{ "_id": ObjectId("4ffa96436ccc195553000055"), "on": { "4e8614f66ccc19aa490006e3": { "hid": ObjectId("4e8614f66ccc19aa490006e3"), "mts": NumberInt(1352979215) }, "4e8614f06ccc19d9340003e8": { "hid": ObjectId("4e8614f06ccc19d9340003e8"), "mts": NumberInt(1352979216) }, "4e8614346ccc19aa490006df": { "hid": ObjectId("4e8614346ccc19aa490006df"), "mts": NumberInt(1352979218) }, "505af2e66ccc19541d0005a9": { "hid": ObjectId("505af2e66ccc19541d0005a9"), "mts": NumberInt(1352979220) }, "505af2d76ccc19f11300109a": { "hid": ObjectId("505af2d76ccc19f11300109a"), "mts": NumberInt(1352979221) } } }
Иногда мне нужно удалить подполя из поля «on». Я делаю это так:
$this->collection->update( array( '_id' => new MongoId('4ffa96436ccc195553000055'), "on.4e8614f66ccc19aa490006e3" => array('$exists' => true), ), array( '$unset' => array( "on.4e8614f66ccc19aa490006e3" => 1 ) ) );
Но поле не удаляется. Что я делаю не так?
PS Я проверил ошибки после отправки запроса, и я получил эту ошибку. Модификаторы и немодификаторы не могут быть смешанными Код: 10154
Спасибо всем, кто помог мне с этим вопросом. Я нашел проблему. Когда я писал вопрос, я использовал простую версию запроса на обновление. Это полная версия
c($this->table)->update( array( '_id' => new MongoId($uid), "on.{$strHid}" => array('$exists' => true), ), array( 'mts' => time() '$unset' => array( "on.{$strHid}" => 1 ) ) );
Моя проблема была в этой части кода. Здесь я использую модификаторы и немодификаторы.
array( 'mts' => time() '$unset' => array( "on.{$strHid}" => 1 ) )
Я переписал это так и все в порядке
array( '$set' => array( 'mts' => time() ), '$unset' => array( "on.{$strHid}" => 1 ) )