我已经要求更新mongo中的对象(我在NoSQL中有点新),所以..我从指南中知道很多,因此,目前,我正在使用此Codeigniter MongoDB library来简化任务。< / p>
所以,这是我存储在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
uuid(在本例中为jugadores
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
字段。
答案 0 :(得分:1)
我没有太多运气为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中,如果使用双引号字符串,则将带有前缀$
的单词视为变量,并在插入字符串之前评估结果。使用单引号字符串可确保该值不会被解释为变量。