从mongoDb文档中删除子字段

时间:2013-01-21 16:54:10

标签: php 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)
    }
  }
}

有时我需要从“on”字段中删除子字段。 我是这样做的:

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

但是字段不要删除。我做错了什么?

P.S我在发送查询后检查了错误,我收到了这个错误 修饰符和非修饰符不能混用代码:10154

1 个答案:

答案 0 :(得分: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
            )
        )