【问题标题】:How to search document by oid in mongoengine如何在mongoengine中按oid搜索文档
【发布时间】:2012-04-03 06:45:33
【问题描述】:

我需要通过 oid 从 db 中获取文档,例如:

Docs.objects(_id='4f4381f4e779897a2c000009')

但是怎么做,如果 _id 需要 ObjectId 对象,即使我尝试从 pymongo 设置 ObjectId 也不起作用。

Docs.objects(_id=pymongo.objectid.ObjectId('4f4381f4e779897a2c000009'))

返回空列表

【问题讨论】:

    标签: python mongodb mongoengine


    【解决方案1】:

    这应该可行:

    Docs.objects(pk='4f4381f4e779897a2c000009')
    

    【讨论】:

    • 这个返回列表。不是一个对象。
    • @Raptor 然后使用 .first()
    【解决方案2】:

    只使用原始字符串怎么样:

    Docs.objects.get(id='4f4381f4e779897a2c000009')
    

    这可能是最简单的方法……对吧?

    【讨论】:

    • 但不适用于主键。还是只有我一个?
    【解决方案3】:

    提出这个问题是因为我自己在这方面遇到了很多麻烦。看起来 PyMongo changed this 和 objectid 不再在 pymongo 内部,而是现在:

    import bson
    Doc.objects.get(id=bson.objectid.ObjectId('4f4381f4e779897a2c000009'))
    

    此外,Mongoengine 使用名称“id”作为 ObjectID 字段。

    【讨论】:

      【解决方案4】:

      这个帖子很旧,但如果有人在 2022 年左右看到它: 这适用于 MongoDB Atlas + Mongoengine == 0.23.1

      from bson.objectid import ObjectId
      Doc.objects(_id=ObjectId("85a2c854002c893dd7756b5g"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-21
        • 1970-01-01
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 1970-01-01
        相关资源
        最近更新 更多