Как обновить объект в монго через PHP - PullRequest
0 голосов
/ 10 июня 2019

Я попросил обновить объект в mongo, (я новичок в NoSQL), поэтому ... я знаю, что это из руководствзадача.

Итак, это объект, который я сохранил в MongoDB:

{
    "_id": ObjectID("5cfdc59844d81560d407a2e3"),
    "equipo": "2bdca4c0-854d-4f73-bca8-cfb78a31f928",
    "jugadores": {
        "5361aa85-df9c-4099-8157-fd4d558622cc": {
            "tipo": "i",
            "estado": false,
            "nombre": "name",
            "apellido_st": "last_name",
            "apellido_nd": "second_last_name",
            "email": "email@example.com"
        }
    }
}

И это «запрос», который я использую для его обновления.

$this->mongo->where(array
(
    "equipo" => "2bdca4c0-854d-4f73-bca8-cfb78a31f928",
    "jugadores" => "5361aa85-df9c-4099-8157-fd4d558622cc"
))->set(array("estado" => true))->update("torneos_inscripciones");

Очевидно, что ... не работает, и я не могу найти, почему именно проблема, поле estado не обновляется;вероятно, это проще, чем я, но не могу в это разобраться.Цель состоит в том, чтобы обновить поле estado на основе jugadores uuid, в данном случае 5361aa85-df9c-4099-8157-fd4d558622cc


На основе B.Fleming ответ, я внес изменение в код:

$this->mongo->where(array(
    "equipo" => "2bdca4c0-854d-4f73-bca8-cfb78a31f928",
    "jugadores.5361aa85-df9c-4099-8157-fd4d558622cc" => array(
        '$exists' => true
)))->set(array("jugadores.5361aa85-df9c-4099-8157-fd4d558622cc" => array("estado" => true)))->update("torneos_inscripciones");

Теперь проблема в том, что массив становится пустым только с полем estado.

1 Ответ

1 голос
/ 10 июня 2019

Мне не повезло найти хорошую документацию для методов CodeIgniter. Их документация ужасна. Однако из того, что я могу найти, я подозреваю, что ваша проблема в вашем запросе where. В частности, похоже, что вы ищете значение 5361aa85-df9c-4099-8157-fd4d558622cc для ключа jugadores. Проблема с этим поиском состоит в том, что 5361aa85-df9c-4099-8157-fd4d558622cc является полем, а не значением, поэтому ни MongoDB, ни CodeIgniter не будут знать, как обрабатывать этот поиск.

Возможно, вы добьетесь большего успеха, проверив наличие ключа 5361aa85-df9c-4099-8157-fd4d558622cc, а не пытаясь сопоставить его как значение:

$this->mongo->where(array(
    "equipo" => "2bdca4c0-854d-4f73-bca8-cfb78a31f928",
    "jugadores.5361aa85-df9c-4099-8157-fd4d558622cc" => array(
        '$exists' => true
    )
))->set(array(
    "jugadores.5361aa85-df9c-4099-8157-fd4d558622cc.estado" => true
))->update("torneos_inscripciones");

Обратите внимание, что я использовал строку в одинарных кавычках, т.е. '$exists' вместо "$exists". Это важно, потому что в PHP, если вы используете строки в двойных кавычках, слова с префиксом $ будут обрабатываться как переменные и оценивать результат перед вставкой в ​​строку. Использование строк в одинарных кавычках гарантирует, что значение не будет интерпретироваться как переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...