2013-01-21 128 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 
      ) 
     )