Я играю с monogdb для задания, и я столкнулся с следующей проблемой: документ, возвращенный pymongo
, не соответствует тому, что возвращается . Простой test.py
:pymongo возвращает разные данные, чем MongoDB Shell
from pymongo import MongoClient
from bson.objectid import ObjectId
client = MongoClient()
db = client['dev_database']
print db.trials.find_one(ObjectId('522f975dc91e273451569942'))
print list(db.trials.find({'_id':ObjectId('522f975dc91e273451569942')}))
Выполнение этого в обоих направлениях на всякий случай. Это возвращает:
{u'nurse_id': u'522f975dc91e273451569941', u'question_ids': [], u'name': u'Test Trial', u'clinician_id': u'522f975dc91e273451569940', u'arms': {u'Med1': u'', u'Placebo': u''}, u'participant_ids': [], u'keywords': [u'abc', u'123'], u'_id': ObjectId('522f975dc91e273451569942')}
[{u'nurse_id': u'522f975dc91e273451569941', u'question_ids': [], u'name': u'Test Trial', u'clinician_id': u'522f975dc91e273451569940', u'arms': {u'Med1': u'', u'Placebo': u''}, u'participant_ids': [], u'keywords': [u'abc', u'123'], u'_id': ObjectId('522f975dc91e273451569942')}]
И если я делаю то же самое внутри MongoDB Shell:
> use dev_database
switched to db dev_database
> db.trials.find('522f975dc91e273451569942')
{ "_id" : "522f975dc91e273451569942", "nurse_id" : "522f975dc91e273451569941", "question_ids" : [ ], "name" : "Test Trial", "clinician_id" : "522f975dc91e273451569940", "arms" : { "Med1" : "", "Placebo" : "" }, "participant_ids" : [
"52325b93c91e274e81f4bdda",
"52325b93c91e274e81f4bddb",
"52325b93c91e274e81f4bddc",
"52325b93c91e274e81f4bddd",
"52325b93c91e274e81f4bdde"
], "keywords" : [ "abc", "123" ] }
>
Как вы можете видеть, test.py
возвращает документ, в котором participant_ids
является пустым списком, но MongoDB Shell говорит иначе.
Я понятия не имею, почему это так, и кажется, что я должен сделать простую, но принципиальную ошибку где-то.
Неудивительно: 'TypeError: ObjectId ('522f975dc91e273451569942') не является JSON serializable' – freespace
Извините, это была моя ошибка. Похоже, что .find() возвращает правильные данные, но «print list()» не рекурсивно печатает массивы. Попробуйте прочитать количество объектов в массиве member_ids. Чудес не бывает. –
Просто прочитайте один объект из mongodb и убедитесь, что его поле "members_ids" пуст. Я считаю, что это не так. –