1

我正在开发一个非常简单的应用程序作为将 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)并尝试根据这些 _id 查询我的数据库,我找不到任何产品。

如您所料,数据库中的 _id 是 ObjectId,类似于“544a481b2ceb7c3093a173a2”。我希望我的视图返回 ObjectIds 而不是长字符串。很简单,但我遇到了麻烦。

4

2 回答 2

1

虽然这很有意义,但我无法让安东尼的回答奏效。所以,我只是破解了它:

hex(value).replace("0x","").replace("L","")
于 2014-10-29T14:11:50.117 回答
1

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

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

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

于 2014-10-28T20:19:14.807 回答