【问题标题】:Retrieve the subset of fields by querying the embedded field通过查询嵌入字段来检索字段子集
【发布时间】:2012-07-16 14:50:21
【问题描述】:

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

我的要求很直接,我想通过它的嵌入字段来查询集合并只返回一些特定的字段

我可以在 mongodb 中做到这一点

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

我在 django 中试过这个

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

但它会引发错误

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

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

【问题讨论】:

    标签: python django mongodb django-nonrel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        • 2020-09-18
        • 2020-10-10
        相关资源
        最近更新 更多