【问题标题】:How to get a document by its primary key in mongoengine?如何通过mongoengine中的主键获取文档?
【发布时间】:2015-05-25 16:01:21
【问题描述】:

我正在将应用程序从 App Engine 的 ndb 移植到 mongoengine。 ndb 提供了Model.get_by_id 方法,我想用mongoengine 来实现它。那么如何通过自动生成的 id 或将 primary_key 设置为 True 的任何字段获取文档?

【问题讨论】:

  • 为什么不检查 get_by_id 的实现?
  • @KarolyHorvath App Engine ndb 的 get_by_id 使用 Google 的数据存储,而我使用的是 MongoDB,所以内部不匹配。

标签: python mongodb mongoengine


【解决方案1】:

你可以使用with_id():

class MyDocument(Document):
    ...
    @classmethod
    def get_by_id(cls, id):
        return cls.objects.with_id(id)

如果存在则返回文档实例,如果不存在则返回None

【讨论】:

    【解决方案2】:

    查看http://docs.mongoengine.org/guide/querying.html

    答案很简单:

    Model.objects(id='your-id')
    

    我假设您知道主键字段的名称。

    【讨论】:

    • 我更喜欢这个而不是 with_id,因为当 id 不存在时它会引发 DoesNotExist 异常,而 with id 返回 None 对象。
    【解决方案3】:

    使用with_id。它专门用于此目的。

    Model.objects.with_id('your-id')
    

    如果没有找到对象,则返回None

    但请确保您没有设置过滤器(就像它是 filter method),因为它会引发 InvalidQueryError

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多