4

是否可以使用Django mongodb nonrel检索字段子集。我对 python 完全陌生,但对 mongo 有很好的了解。

我的要求非常直接,我想通过其嵌入字段查询集合并仅返回一些特定字段

我可以在 mongodb 中做到这一点

db.Contract.find({'owner.name':'Ram'},{'address':1})

我在 django 中试过这个

Contract.objects.filter(owner__name='Ram')

但它会引发错误

raise FieldError("Join on field %r not allowed. 你拼错了%r for the lookup type?" % (name, names[pos + 1])) FieldError: Join on field 'owner' not allowed. 您是否拼错了查找类型的“名称”?

我完全被打动了。我相信我有文档中指定的模型。

class SimplePerson(models.Model):
    name = models.CharField(max_length=255)
    user_key = models.CharField(max_length=255)


class Contract(models.Model):
    owner = EmbeddedModelField('SimplePerson')
    title = models.CharField(max_length=120, )

这真的很奇怪。我在文档站点中找不到有关如何查询嵌入字段和检索字段子集的任何参考。

最后我使用raw_query来查询嵌入字段

Contract.objects.raw_query({'owner.name':'Ram'})

但仍然无法弄清楚如何检索字段子集。有人可以帮我吗?

4

2 回答 2

3

子对象过滤器尚不可用,因此您需要下拉到raw_query(您已经想通了)。要检索字段子集,请使用.values('field1', 'field2', ...).

于 2012-07-16T18:40:44.397 回答
0

现在可以使用以下语法按 EmbeddedField 进行过滤:

Contract.objects.filter(owner={'name': 'Ram'})
于 2022-02-01T08:04:06.667 回答