如何使用 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()
我有一个 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()