如何在 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 中的特定文档?的主要内容,如果未能解决你的问题,请参考以下文章