PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-嵌套文档作为对象而不是数组插入大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我目前正在将MySQL一个我一直在研究的站点迁移到MongoDB,并且遇到了一个奇怪的问题.

我正在尝试进行以下收集:

country (String)
regions (array)
    regions (String)
    cities (array)
        city (String)

问题是由于某种原因,city数组之一正在作为对象插入.一切都来自相同的来源,并使用相同的代码.

问题示例:

[
    {
        country: "United States",
        regions: (array) [
            {
                region: "Arizona",
                cities: (array) [
                    { city: "Phoenix" }
                ]
            },
            {
                region: "California",
                cities: (object) [
                    { city: "Los Angeles" }
                ]
            }
        ]
    }
]

这是一个问题,因为当我搜索{“ regions.cities.city”:“ Los Angeles”}时,结果返回为空,但是如果我搜索{“ regions.cities.city”:“ Phoenix”}我得到正确的结果.

我希望这一切都说得通,但请随时提出问题.

-编辑-

PHP代码生成问题:

$countries = $this->db_model->find_list('countries', array(), false, truE);
foreach($countries as $key => $country)
{
    if($regions = $this->db_model->find_list('regions', array('country_id' => $countrY['id']), false, truE))
    {
        foreach($regions as $rkey => $region)
        {
            if($cities = $this->db_model->find_list('cities', array('region_id' => $region['id']), false, truE))
            {
                $regions[$rkey]['cities'] = $cities;
            }
        }
        $countries[$key]['regions'] = $regions;
    }
}
$this->mongo->batch_insert('countries', $countries);

解决方法:

事实证明,需要重置的数组键的作用是,我删除了一些符合某些条件的项目(从示例代码删除,以使内容易于阅读,将包含在下面的代码中).

$countries = $this->db_model->find_list('countries', array(), false, truE);
foreach($countries as $key => $country)
{
    if($countrY['deleted']) { unset($countries[$key]); }
    elseif($regions = $this->db_model->find_list('regions', array('country_id' => $countrY['id']), false, truE))
    {
        foreach($regions as $rkey => $region)
        {
            if($region['deleted']) { unset($regions[$rkey]); }
            elseif($cities = $this->db_model->find_list('cities', array('region_id' => $region['id']), false, truE))
            {
                foreach($cities as $ckey => $city)
                {
                    if($citY['deleted']) { unset($cities[$ckey]); }
                }
                $regions[$rkey]['cities'] =array_values($cities);
            }
        }
        $countries[$key]['regions'] = array_values($regions);
    }
}
$this->mongo->batch_insert('countries', array_values($countries));

感谢Marco提供的所有帮助和见解.

大佬总结

以上是大佬教程为你收集整理的php-嵌套文档作为对象而不是数组插入全部内容,希望文章能够帮你解决php-嵌套文档作为对象而不是数组插入所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: