2014-01-30 56 views
0
我使用MongoDB的

,並在過去,我已經能夠使用下面的插入或添加到一個子陣列已經在DB收集不加力推子陣列

這裏是我的問題,每一天我們看看itunes top 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))); 
     } 

如果發現藝術家和歌曲已經是集合,應該更新。目前它沒有運行任何東西。

如果它更新它不正確。

你看到「日期」字段應該顯示與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-29T07:10:38-07:00" 
    ], 
    "chartno" : [ 
     20 
    ] 
} 

當腳本看到它回到前100時,它應該將它添加到日期和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} 
    ] 
} 

但是未發生INFACT什麼似乎正在增加。

我想知道我是否做錯了什麼?我很清楚,我有。

我也試過以下'$addToSet'但沒有成功。

回答

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))), 
    ));