2014-10-28 3 views
1

MongoDB와 web2py를 통합하기위한 유스 케이스로 아주 ​​간단한 애플리케이션을 만들고 있습니다.MongoDB & web2py : ObjectIds 작업하기

내 데이터베이스 테이블 :

db.define_table('products', 
Field('brand', label='Brand'), 
Field('photo', label='Photo'), 
... 
Field('options', label='Options')) 

내 컨트롤러 :

def products(): 
qset = db(db['products']) 
grid = qset.select() 
return dict(grid=grid) 

내보기 :

{{extend 'layout.html'}} 
<h2>Product List</h2> 
{{=grid}} 
응용 프로그램의 한 섹션에서는 제품의 목록을 반환에 관심이 있어요

제품은 문제없이 반환됩니다. 그러나 products._id 필드는 '26086541625969213357181461154'양식의 값을 반환합니다. 쉘 (또는 파이썬)으로 전환하여 _ids를 기반으로 데이터베이스를 쿼리하려고하면 어떤 제품도 찾을 수 없습니다.

예상대로 데이터베이스의 _ids는 '544a481b2ceb7c3093a173a2'와 같은 ObjectId입니다. 나는 긴 문자열이 아닌 ObjectId를 반환 할 것을 제 견해로하고 싶습니다. 간단하지만 문제가 있습니다.

답변

1

완벽 함에도 불구하고 앤서니의 답안 작업을 할 수 없었습니다. 그래서, 난 그냥 해킹 :

hex(value).replace("0x","").replace("L","") 
+0

흠, 확실하지 왜'db._adapter.object_id' 당신을 위해 작동하지 않지만, 어떤 경우에, 그냥'진수 (ARG) [2 일을 끝 : ] .rstrip ('L') .zfill (24)', 대부분 코드와 동일합니다. – Anthony

1

주어진 MongoDB 레코드에 대해 DAL 개체를 구성 할 때 ObjectId는 long(str(value), 16)을 통해 long 정수로 변환하여 나타냅니다. 당신이 MongoDB의 쿼리를 위해 DAL을 사용하는 경우는 처리로

object_id = db._adapter.object_id('26086541625969213357181461154') 

물론이, 당신은이에 대해 걱정할 필요가 없습니다 : ObjectId가 다시 변환하려면, 당신은 MongoDB를 어댑터의 object_id 방법을 사용할 수 있습니다 자동으로 변환합니다.