我正在使用Mongodb和Pymongo开发Flask应用程序。
我在mongo中有一个名为document_load
的集合,它引用了另一个名为document
的集合,document
引用了另一个名为client
的集合。< / p>
问题是,我想查询document_load
,但我也希望得到document
,并且client
以有效的方式。
我试过这个来获取特定document
的{{1}}:
document_load
它有效!它显示了这个:
db.document_load.aggregate([
{'$lookup': {
'from': "document",
'localField': "document",
'foreignField': "_id",
'as': "document"
}},
{'$match': {
'_id': ObjectId('587f6e3ef28bd63078419194')
}}
])
由于某种原因,它将{'document': [{'client': ObjectId('5754b202b480776b79184780'), ...some other fields}],
...some other fields}
document
显示为一个元素的数组,但现在我也试图以同样的方式获取客户端,不仅是id,而且我不知道怎么做,或者甚至可能。
我一直在寻找,但我找不到任何有用的东西。
提前致谢。
答案 0 :(得分:0)
当您定义mongo文档时,具有最小的结构,如
from mongoengine import Document,
from mongoengine import StringField, LazyReferenceField
class Client(Document):
client_name = StringField(required = True, unique = True)
...
class DocumenT(Document):
doc = YourDefinedField(required=True, unique= True)
ref_client = LazyReference(Client, passthrough=False, reverse_delete_rule=3)
...
class Document_Load(Document):
name = StringField(required = True, unique = True)
ref_doc = LazyReference(DocumenT, passthrough=False, reverse_delete_rule=3)
...
您可以执行以下操作:
Document_Load.objects(name="your_object_identifier").ref_field.fetch()
# This will return the DocumenT asosiated by ref_doc
# This ref_doc needs to have as value the ObjectId of the reference in DocumenT
由于您要访问集合document
,因此只需连接一些ref_doc
,ref_client
和.fetch()
的
document_ = Document_Load(name = "Payments_Definitive").ref_doc.fetch().ref_client.fetch().client_name