2013-08-25 17 views
7

Bir süredir mongo kullanıyorum (python, mongo 2.4.4 64 bit, OS X 10.8.2, pymongo 2.5.2, python 2.7.2 ile)) ve garip bir davranış gözlemledim.InvalidDocument: Nesne kod olamaz: ObjectId ('51861bc79bb6550f2b98be23')

nesneyi kodlanamadı: objectId ('51861bc79bb6550f2b98be23')

... "/ Users/nutrina/www/env_pdf_admin_apache/lib bir koleksiyona bir belge eklemeye çalışırken Bazen istisna aşağıdaki atıyor /python2.7/site-packages/pymongo/collection.py ", satır 266, kaydetme dönüşünde self.insert (to_save, işleme, güvenli, check_keys, ** kwargs) Dosya "/Kullanıcılar/nutrina/www/env_pdf_admin_apache/lib/python2.7/site-paketleri/pymongo/collection.py ", satır 357, ekleme içinde continue_on_error, self .__ uuid_subtype), güvenli) Geçersiz ocument: nesneyi kodlanamadı: objectId ('51861bc79bb6550f2b98be23')

Ben bu neden oluyor hiçbir fikrim yok. Bu hatayla karşılaşan başka biri var mı, yoksa birisinin neden kaynaklanabileceği konusunda bir fikri var mı?

Güncelleme: Ben kurtarmaya çalışıyorum nesne yapısı aşağıdaki sahiptir:

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

hata alanına * user_id * için rapor ama değer geçerli bir Nesne Kimliği olduğuna eminim edilir. Bu, başka bir koleksiyondan (kullanıcı) gelen bir nesnenin (kullanıcı) '_id' dir. Ve kaydetme işlemi çoğu zaman aynı değerde başarılı olur.

sayesinde Gerald

+0

Paylaşmaya çalıştığınız nesne hakkında başka bir şey var mı? Ne tür veriler içerir? – WiredPrairie

+0

Burada bir göz var http://stackoverflow.com/a/18414699/535962 – lovesh

+0

Sorunun açıklamasını güncelliyorum. @lovesh: Sorunun ilişkili olduğunu sanmıyorum. Eski bir soruyu yeniden canlandırmak için – nutrina

cevap

1

belgeniz (dize, tamsayı, tarih, boolean, vb) bir yerli tür kullanmıyorsanız bunu doğru olarak kodlanmış olduğundan emin olmak gerekir. Standart olmayan veri türlerinizi doğru şekilde kodlamazsanız, PyMongo'ya eklenebilir. Muhtemelen yeni nesneyi bir PyMongo belgesine dönüştürmeyi reddettiği bir uç noktaya çarpıyorsunuzdur.

PyMongo: Custom Types

+0

Eh, Ben 'ObjectId' pymongo ve mongodb kendisi tarafından desteklenen bir yerli türü olduğunu düşünüyorum.Bu nedenle OP –

+0

için yanlış giden başka bir şey olmalı Evet, istisnanın atıldığı standart bir tür, geçerli bir ObjectId ve ayarladığım değerin geçerli olduğundan eminim. Lütfen sorun açıklamasına yaptığım güncellemeye bakın. – nutrina

10

Python tamsayılar mongodb tarafından desteklenmeyen keyfi hassas numaraları gibi saklanır. Önce bunları normal int64 veya string nesnelerine dönüştürmeniz gerekir.

İlgili konular