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

How to query specific documents in MongoDB using MongoEngine in Python?

我有一个 MongoDB Collection,里面有很多文档。每个文档如下所示:

{
    "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")
}

这是我要实现的 objective:我将获得 t_id, pid, dt_id, dt_n, dt_v, md_v as input 的值。现在我必须查询 collection,这样我就可以从这个 collection 中获取与这些值匹配的文档,以及具有最新 register_time 的文档,如果有多个这样的文档匹配所有这些值.

注意:pid、dt_id、dt_n、dt_v、md_v <- 这些值存在于“[=28] 的 sub-json 中=]" 在每个文档中。 而且,我的组织在 Python 中使用 MongoEngine 库进行 MongoDB 操作。所以我正在尝试使用这个库找到解决方案。

匹配子文档(“内嵌文档”)即可,如果有时间戳,排序查询取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()