集合不添加推送到子阵列

时间:2014-01-30 16:32:53

标签: php arrays mongodb collections set

我正在使用MongoDB,过去我已经能够使用以下内容插入或添加到DB中已有的子数组

这是我的问题,每天我们都会看看itunes的前100名,我们会将歌曲和艺术家插入到我们的收藏中,事实上我们使用两个系列来完成这项工作

但我遇到的问题是我们存储的所有歌曲和艺术家都曾出现在iTunes前100名中。

见下面的代码

$collection = static::db()->itunes_collection_australia;
        $document = $collection->findOne(array('song' => (string)$entry->imname, "artist"=>(string)$entry->imartist));


        if (null !== $document) {

            $collection->update(
                array(array('song' => (string)$entry->imname, "artist"=>(string)$entry->imartist)),
                      array('$push' => array("date" => array('$each'=> array((string)$date)),"chartno"=> array('$each'=> array($a))),

            ));

        }
        else
        {
            $collection->insert(array("song"=>(string)$entry->imname, "artist"=>(string)$entry->imartist,"preview"=>(string)$preview,"cd_cover"=>(string)$cover, "price"=>(string)$price,"date"=>array((string)$date),"chartno"=>array($a)));
        }

应该发生的事情是,如果发现艺术家和歌曲已经是该集合,它应该更新。目前它没有运行任何东西。

如果它正在更新它没有做对。

您会看到“日期”字段应显示与图表相同的多个日期,它还应显示当天图表中的位置。

这是第一次插入时的外观。

{
    "_id" : ObjectId("52ea794d6ed348572d000013"),
    "song" : "Timber (feat. Ke$ha)",
    "artist" : "Pitbull",
    "preview" : "http://a1264.phobos.apple.com/us/r1000/030/Music6/v4/48/30/3c/48303ca0-c509-8c15-4d4a-7ebd65c74725/mzaf_5507852070192786345.plus.aac.p.m4a",
    "cd_cover" : "http://a1082.phobos.apple.com/us/r30/Music6/v4/64/41/81/644181ba-d236-211d-809e-057f4352d3d8/886444273480.170x170-75.jpg",
    "price" : "$2.19",
    "date" : [ 
        "2014-01-29T07:10:38-07:00"
    ],
    "chartno" : [ 
        20
    ]
}

当脚本看到它回到前100名时,它应该将它添加到date和chartno字段。

喜欢这样

{
    "_id" : ObjectId("52ea794d6ed348572d000013"),
    "song" : "Timber (feat. Ke$ha)",
    "artist" : "Pitbull",
    "preview" : "http://a1264.phobos.apple.com/us/r1000/030/Music6/v4/48/30/3c/48303ca0-c509-8c15-4d4a-7ebd65c74725/mzaf_5507852070192786345.plus.aac.p.m4a",
    "cd_cover" : "http://a1082.phobos.apple.com/us/r30/Music6/v4/64/41/81/644181ba-d236-211d-809e-057f4352d3d8/886444273480.170x170-75.jpg",
    "price" : "$2.19",
    "date" : [{
        "2014-01-30T07:10:38-07:00"
    },{2014-01-31T07:10:38-07:00}],
    "chartno" : [ 
        {20},{30}
    ]
}

然而事实上并没有发生任何似乎没有添加。

我想知道我做错了什么?很清楚,我有。

我也尝试过以下'$addToSet',但没有成功。

1 个答案:

答案 0 :(得分:0)

您的更新声明错误。你在第一个参数上有太多的数组。试试这个:

   $collection->update(
        array('song' => (string)$entry->imname, "artist"=>(string)$entry->imartist),
        array('$push' => array("date" => array('$each'=> array((string)$date)),"chartno"=> array('$each'=> array($a))),
    ));
相关问题