【发布时间】:2016-03-03 13:09:42
【问题描述】:
据我了解,mongoengine's ReferenceField 允许传递对存储在数据库中的另一个文档的引用。
到目前为止,我能够在不同的集合中创建多个文档(在本示例中减少为两个),现在我需要相互引用。
正如您将在下面看到的,我想在 regenerators 集合中创建新文档时传递给定材料的引用。在我提供的示例中,这意味着传递对文档 aisi304 的引用。
我的再生器文档定义如下:
class Regenerators(Document):
material = ReferenceField(Materials, required=True)
材料文档需要引用再生器文档,定义如下:
class Materials(Document):
title = StringField(unique=True, required=True)
但是,在这种情况下,所需的材料文档已经存储在数据库中:
{
"_id": ObjectId("565b84dc55c40f63392ffdee"),
"title": "aisi304"
}
所以我尝试创建一个新的再生器文档,如下传递要引用的材料文档的标题作为关键字参数:
# the passed keywords are read from json normally, but I put it in directly for the sake of readability
r = Regenerators(material="aisi304")
r.save()
但是,由于存储在 DB 中的再生器文档看起来像这样(使用 mongod 进行调试),因此似乎没有正确传递引用:
{
"_id": ObjectId("565b89d355c40f6355fa5f45"),
"material": "aisi304"
}
我以为我会实现这样的目标:
{
"_id": ObjectId("565b89d355c40f6355fa5f45"),
"material": {
"_id": ObjectId("565b84dc55c40f63392ffdee"),
"title": "aisi304"
}
}
在tutorial provided in the docs 中,它们传递了对新创建文档的引用。但是,这不适合我,因为我需要参考现有的文档。
我做错了什么?
【问题讨论】:
标签: python mongodb reference document mongoengine