如何在 Python 中使用 MongoEngine 查询 MongoDB 中的特定文档?

Posted

技术标签:

【中文标题】如何在 Python 中使用 MongoEngine 查询 MongoDB 中的特定文档?【英文标题】:How to query specific documents in MongoDB using MongoEngine in Python? 【发布时间】:2021-08-25 17:45:01 【问题描述】:

我有一个包含许多文档的 MongoDB 集合。每个文档如下所示:


    "t_id" : "fa2b30c8c39c11eba1208d11d1604e94",
    "e_id" : "fa2b30c8c39c11eba1208d11d1604h51",
    "meta_info" : 
        "pid" : "5f175a0feaace0426851810f",
        "dt_id" : "32574174-c721-46b3-9de4-a5016d595eb4",
        "dt_n" : "qwerty",
        "dt_v" : "3",
        "md_v" : "1"
    ,
    "register_time" : ISODate("2021-06-08T19:35:33.515Z")

这是我想要实现的目标:我将获得t_id, pid, dt_id, dt_n, dt_v, md_v as input 的价值。现在我必须查询该集合,以便从该集合中获取与这些值匹配的文档以及具有最新 register_time 的文档如果有多个此类文档与所有这些值匹配

注意:pid、dt_id、dt_n、dt_v、md_v

【问题讨论】:

【参考方案1】:

可以匹配子文档(“嵌入文档”),如果您有时间戳,您可以通过排序查询并取 1 个元素轻松获取最新的。

以下简化案例应该可以帮助您继续前进

from mongoengine import *
import datetime

connect()

class MetaInfo(EmbeddedDocument):
    pid = StringField()


class MyDoc(Document):
    meta_info = EmbeddedDocumentField(MetaInfo)
    register_time = DateTimeField(default=datetime.datetime.utcnow)


MyDoc(meta_info=MetaInfo(pid="001")).save()
MyDoc(meta_info=MetaInfo(pid="002")).save()   # just to add a non-matching one
MyDoc(meta_info=MetaInfo(pid="001")).save()

# matches the 2 doc with pid=001
MyDoc.objects(meta_info__pid="001")     

# matches the latest one that was saved with pid=001
MyDoc.objects(meta_info__pid="001").order_by("-register_time").first()    

             

【讨论】:

以上是关于如何在 Python 中使用 MongoEngine 查询 MongoDB 中的特定文档?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 Python 中使用 GCP 枚举?

如何在python中使用nice命令?

如何在 Python 中使用 Selenium?

如何在Python中使用textcat?

当python使用“Python.h”调用该c++进程时,如何在python中停止一个c++进程

如何使用 Boost.Python 在 Python 中调用内置函数