1

このような書類があります

{
   "_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
            )
        )
    );

しかし、フィールドは削除しません。私は何を間違っていますか?

PS クエリの送信後にエラーをチェックしたところ、このエラーが発生しました Modifiers and non-modifiers cannot be mixed Code:10154

4

1 に答える 1

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
            )
        )
于 2013-01-22T08:40:09.140 に答える