如何通过PHP更新mongo中的对象
我已经要求更新mongo中的一个对象(我在NoSQL中有点陌生),所以。。我所知道的很多都是来自于指南,所以,目前我正在使用它来简化任务 这就是我存储在MongoDB中的对象:如何通过PHP更新mongo中的对象,php,mongodb,codeigniter,nosql,Php,Mongodb,Codeigniter,Nosql,我已经要求更新mongo中的一个对象(我在NoSQL中有点陌生),所以。。我所知道的很多都是来自于指南,所以,目前我正在使用它来简化任务 这就是我存储在MongoDB中的对象: { "_id": ObjectID("5cfdc59844d81560d407a2e3"), "equipo": "2bdca4c0-854d-4f73-bca8-cfb78a31f928", "jugadores": { "5361aa85-df9c-4099-8157-fd4d
{
"_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(数组)
(
“设备”=>“2bdca4c0-854d-4f73-bca8-cfb78a31f928”,
“jugadores”=>“5361aa85-df9c-4099-8157-fd4d558622cc”
))->设置(数组(“estado”=>true))->更新(“torneos_inscripciones”);
显然。。不起作用,我无法找到问题的确切原因,estado
字段没有得到更新;可能比我想象的要简单,但我无法理解。目的是基于jugadores
uuid更新estado
字段,在这种情况下5361aa85-df9c-4099-8157-fd4d558622cc
根据回答,我对代码进行了更改:
$this->mongo->where(数组)(
“设备”=>“2bdca4c0-854d-4f73-bca8-cfb78a31f928”,
“jugadores.5361aa85-df9c-4099-8157-fd4d558622cc”=>阵列(
“$exists”=>true
)))->设置(数组(“jugadores.5361aa85-df9c-4099-8157-fd4d558622cc”=>数组(“estado”=>真))->更新(“torneos_inscripciones”);
现在的问题是使数组为空,只显示
estado
字段。我没有太多机会找到任何关于CodeIgniter方法的好文档。他们的文件很糟糕。然而,从我所能找到的情况来看,我怀疑您的问题出在您的where
查询中。具体来说,它看起来像是在搜索钥匙jugadores
的值5361aa85-df9c-4099-8157-fd4d558622cc
。此查找的问题在于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中,如果使用双引号字符串,则前缀为$
的单词将被视为变量,并在插入字符串之前计算结果。使用单引号字符串可确保该值不会被解释为变量。您表示这“不起作用”,但是否可以更具描述性?它只是没有按照预期的方式运行,还是抛出了一个错误?如果抛出错误,那么错误是什么?你所面临的问题越具体,你就越容易得到解决问题的答案。我的意思是,estado
字段不更新。所以我想是因为查询是邮件格式的还是..?我已经更新了帖子。。好像是你做了一些改变。。现在的问题是,当更新数组时,只是将estado
放在里面,而不是更新它。您根本误解了MongoDB执行更新的方式。您的查询本身被设计为使用array('estado'=>true)
覆盖整个jugadores.5361aa85-df9c-4099-8157-fd4d558622cc的值。如果只想更新单个字段,则将该字段添加到字段路径以进行更新:->set(数组(“jugadores.5361aa85-df9c-4099-8157-fd4d558622cc.estado”=>true))
。感谢您的指导!我不知道你需要真正的“路径”到现场。