MongoDB& web2py:使用ObjectIds

时间:2014-10-28 17:43:22

标签: python mongodb web2py objectid

我正在开发一个非常简单的应用程序,作为将MongoDB与web2py集成的用例。在该应用程序的一个部分中,我有兴趣返回产品列表:

我的数据库表:

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”的形式返回值。如果我切换到shell(或python)并尝试根据这些_ids查询我的数据库,我找不到任何产品。

正如您所料,数据库中的_ids是ObjectIds,看起来像这样'544a481b2ceb7c3093a173a2'。我想我的观点是返回ObjectIds而不是长字符串。很简单,但我遇到了麻烦。

2 个答案:

答案 0 :(得分:1)

为给定的MongoDB记录构造DAL Row对象时,ObjectId通过long转换为long(str(value), 16)整数来表示。要转换回ObjectId,您可以使用MongoDB适配器的object_id方法:

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

当然,如果你使用DAL来查询MongoDB,你不必担心这一点,因为它会自动处理转换。

答案 1 :(得分:1)

虽然这很有道理,但我无法让安东尼的答案奏效。所以,我只是入侵了它:

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