2013-01-21 56 views
1

刪除子域我有這樣從MongoDB的文檔

{ 
    "_id": ObjectId("4ffa96436ccc195553000055"), 
    "on": { 
    "4e8614f66ccc19aa490006e3": { 
     "hid": ObjectId("4e8614f66ccc19aa490006e3"), 
     "mts": NumberInt(1352979215) 
    }, 
    "4e8614f06ccc19d9340003e8": { 
     "hid": ObjectId("4e8614f06ccc19d9340003e8"), 
     "mts": NumberInt(1352979216) 
    }, 
    "4e8614346ccc19aa490006df": { 
     "hid": ObjectId("4e8614346ccc19aa490006df"), 
     "mts": NumberInt(1352979218) 
    }, 
    "505af2e66ccc19541d0005a9": { 
     "hid": ObjectId("505af2e66ccc19541d0005a9"), 
     "mts": NumberInt(1352979220) 
    }, 
    "505af2d76ccc19f11300109a": { 
     "hid": ObjectId("505af2d76ccc19f11300109a"), 
     "mts": NumberInt(1352979221) 
    } 
    } 
} 

有時我需要「的」領域刪除子域文件。 我這樣做:

$this->collection->update(
     array(
      '_id' => new MongoId('4ffa96436ccc195553000055'), 
      "on.4e8614f66ccc19aa490006e3" => array('$exists' => true), 
     ), 
     array(
      '$unset' => array(
       "on.4e8614f66ccc19aa490006e3" => 1 
      ) 
     ) 
    ); 

但字段不刪除。我究竟做錯了什麼?

P.S我檢查發送查詢後的錯誤,我得到這個錯誤 修飾符和非修飾語不能混用代碼:10154

+0

其中蒙戈的版本,您使用的一切還好嗎? – ggreiner

+0

mongo的版本是1.6.5 – Kison

+0

這通常是由於你的文檔中帶有'$'s的鍵,這似乎是它可能將'$ exists'視爲非修飾符而不是操作符,但是我是相當確定'$ exists'是在1.6.5中,你可以用'「on.4e8614f66ccc19aa490006e3」=>數組('$ ne'=> null)''來嘗試嗎? – Sammaye

回答

0

感謝大家誰這個問題幫我。我發現問題。當我寫問題時,我使用了簡單版本的更新查詢。這是完整版

c($this->table)->update(
     array(
      '_id' => new MongoId($uid), 
      "on.{$strHid}" => array('$exists' => true), 
     ), 
     array(
      'mts' => time() 
      '$unset' => array(
       "on.{$strHid}" => 1 
      ) 
     ) 
    ); 

我的麻煩是在這部分代碼。這裏我使用修飾符和非修飾符。

 array(
      'mts' => time() 
      '$unset' => array(
       "on.{$strHid}" => 1 
      ) 
     ) 

我重寫它像這樣和

 array(
      '$set'  => array(
       'mts' => time() 
      ), 
      '$unset' => array(
       "on.{$strHid}" => 1 
      ) 
     )