gpt4 book ai didi

mongodb - Mongoengine:如何递归取消引用文档 json 序列化它们?

转载 作者:可可西里 更新时间:2023-11-01 09:37:02 24 4
gpt4 key购买 nike

有一个 mongoengine 文档,其中有一些 ReferenceFields,如何将这些递归转换为 JSON?

到目前为止,我已经尝试过:

  1. to_mongo() 但是 ReferenceFields 被忽略了。

  2. DeReference()(video._data),我只得到每个引用模型的 repr():

{
'audience': 0,
'channels': [],
'created_date': datetime.datetime(2006, 1, 2, 12, 11, 3),
'id': ObjectId('51af7076a2aa1c2179035e8e'),
'images': {},
'kind': u'VOD',
'modified_date': datetime.datetime(2013, 6, 5, 19, 39, 4, 327000),
'parts': [
[<Media: VOD 0x0>,
<Media: VOD 0x0>,
<Media: VOD 0x0>,
<Media: VOD 0x0>]
],
'provider': <Provider: TEST>,
'published_date': datetime.datetime(2006, 1, 2, 12, 11, 3),
'sources': [<Source: TEST>],
'titles': {u'en-US': u'TEST', u'es-ES': u'PRUEBA', u'pt-BR': u'TESTE'}
}

MediaProviderSource 对象是否未按预期进行序列化,或者我是否遗漏了什么?

最佳答案

要获取 ReferenceField 值,您需要在引用字段上调用 ​​to_mongo() - 而不是父文档,因为它只会返回文档的 DBRef 或 ObjectId。

因此在您的示例中 - 您有 3 个引用字段:providerpartssources 给定一个名为 my_doc< 的文档实例 要获取引用文档的字典值,请执行以下操作:

provider = my_doc.provider.to_mongo()
parts = [part.to_mongo() for part in my_doc.parts]
sources = [source.to_mongo() for source in my_doc.sources]

** 旁注

显示的模式似乎高度相关,ReferenceFields 导致应用程序连接(MongoEngine 必须在内部查询并为您解除引用)。在获取文档的所有部分时,这不会在高级别上表现出色 - 您需要为文档本身查询一次,为提供者查询一次,为部分查询一次,为源查询一次 - 4查询 以检索一个文档。对于不执行 queryset.select_related(2) 的较大查询集,这意味着 4x queryset count。这可能不是我们想要的。

关于mongodb - Mongoengine:如何递归取消引用文档 json 序列化它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com