通过查询嵌入字段来检索字段子集

时间:2012-07-16 14:50:22

标签: python django mongodb django-nonrel

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

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

我可以通过

在mongodb中做到这一点
db.Contract.find({'owner.name':'Ram'},{'address':1})

我在django中试过这个

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

但它会抛出错误

  

引发FieldError(“不允许加入字段%r。你拼错%r了吗?   对于查找类型?“%(name,names [pos + 1]))FieldError:Join on   字段'所有者'不被允许。你拼错了'名字'吗?   查找类型?

我完全被击中了。我相信我有我的模型中指定的模型。

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'})

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

1 个答案:

答案 0 :(得分:3)

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