2013-11-23 3 views
0

Как бы мне вернуть только строковый компонент объекта BSON ObjectId с использованием pymongo. Я могу кодировать строку в идентификатор объекта, импортируя ObjectId из bson.objectid; но я не могу сделать обратное.Вернуться .str. ObjectID using pymongo

Когда я пытаюсь:

for post in db.votes.find({'user_id':userQuery['_id']}): 
      posts += post['_id'].str 

я получаю ObjectId не имеет ошибки ул атрибут.

Спасибо!

ответ

2

Стандартный способ в Python, чтобы получить строковое представление объекта использует str встроенную функцию:

id = bson.objectid.ObjectId() 
str(id) 
=> '5190666674d3cc747cc12e61' 
+0

Спасибо! - теперь выглядит очень очевидно :( –

0

попробовать это:

for post in db.votes.find({'user_id':userQuery['_id']}): 
      posts += str(post['_id']) 

Кстати, вы можете использовать MongoKit иметь дело со специальным BSON структура данных.

from bson.objectid import ObjectId 


class CustomObjectId(CustomType): 
mongo_type = ObjectId # optional, just for more validation 
python_type = str 
init_type = None # optional, fill the first empty value 

def to_bson(self, value): 
    """convert type to a mongodb type""" 
    return ObjectId(value) 

def to_python(self, value): 
    """convert type to a python type""" 
    return str(value) 

def validate(self, value, path): 
    """OPTIONAL : useful to add a validation layer""" 
    if value is not None: 
     pass # ... do something here 

Этот обычай ObjectId может превратить BSON ObjectId в Python str.

Для получения дополнительной информации посетите http://mongokit.readthedocs.org/mapper.html#the-structure.

Смежные вопросы