Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PHP更新mongo中的对象_Php_Mongodb_Codeigniter_Nosql - Fatal编程技术网

如何通过PHP更新mongo中的对象

如何通过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

我已经要求更新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(数组)
(
“设备”=>“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))
。感谢您的指导!我不知道你需要真正的“路径”到现场。