2013-08-25 3 views
7

私はmongoをしばらく使用しています(mongo 2.4.4 64ビット、OS X 10.8.2、pymongo 2.5.2、python 2.7.2 )、私は奇妙な行動を観察した。InvalidDocument:オブジェクトをエンコードできません:ObjectId( '51861bc79bb6550f2b98be23')

オブジェクトをエンコードすることはできません:時にはそれがコレクションに文書を挿入しようとするときは、次の例外がスローされたObjectId( '51861bc79bb6550f2b98be23')

... 「/ユーザ/ nutrina/WWW/env_pdf_admin_apache/libに"/ users/nutrina/www/fonts2.7 /site-packages/pymongo/collection.py"、 行266、保存するself.insert(to_save、操作、安全、 check_keys、** kwargs)ファイル " (継続353、insert_in_error、self .__ uuid_subtype)、safe) InvalidD(env_pdf_admin_apache/lib/python2.7/site-packages/pymongo/collection.py "、 行357) ]で文書:オブジェクトをエンコードすることはできません: のObjectId( '51861bc79bb6550f2b98be23')

私はなぜこれが起こっている見当がつかない。他に誰かがこのエラーに遭遇したのですか?

更新: 私は、保存しようとしているオブジェクトは、構造は次の通りです:

{ 
    'is_open': true, // boolean 
    'data': { 
     'user_id': ObjectId(...), // ObjectId 
     'user_type': 1,   // Integer 
    } 
} 

エラーが*フィールド*のUSER_IDについて報告されているが、私は値が有効なのObjectIdであることをかなり確信しています。これは、別のコレクション(ユーザー)からのオブジェクト(ユーザー)の '_id'です。そして、保存操作はほとんどの場合同じ値で成功します。

おかげで、 ジェラルド

+0

共有しようとしているオブジェクトを保存しようとしていることはありますか?それにはどのような種類のデータが含まれていますか? – WiredPrairie

+0

ここを見てくださいhttp://stackoverflow.com/a/18414699/535962 – lovesh

+0

私は問題の説明を更新しました。 @lovesh:私は問題が関連しているとは思わない。 – nutrina

答えて

1

あなたはそれが正しくエンコードされますことを確認する必要があり、あなたの文書のネイティブ型(文字列、整数、日付、ブール値、など)を使用していない場合。非標準データ型を適切にエンコードしていない場合、PyMongoに挿入できる保証はありません。おそらく、新しいオブジェクトをPyMongoドキュメントに組み立てることを拒否する辺りのケースに当たっているでしょう。

PyMongo: Custom Types

+0

「ObjectId」はpymongoとmongodbの両方でサポートされているネイティブタイプだと思います。だから、OPのために間違ったことがあるはずです –

+0

はい、それは例外がスローされる、それが有効なObjectIdであり、私が設定した値が有効であることを確信しています。問題の説明への私の更新を見てください。 – nutrina

10

Pythonの整数はMongoDBのでサポートされていない任意の精度の数値として格納されています。通常のint64または文字列オブジェクトに変換する必要があります。

関連する問題