引用字段引用现有文档

2024-09-30 08:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

据我所知,mongoengine's ReferenceField允许传递对存储在数据库中的另一个文档的引用。在

到目前为止,我已经能够在不同的集合中创建多个文档(在本例中减少到两个),现在我需要相互引用这些文档。在

正如您将在下面看到的,我希望在regenerators集合中创建新文档时传递给定材质的引用。在我提供的示例中,这意味着传递对文档aisi304的引用。在

我的再生器文件定义如下:

class Regenerators(Document):
    material = ReferenceField(Materials, required=True)

材料文件需要参考再生器文件,其定义如下:

^{pr2}$

但是,所需的材料文件已存储在数据库中,如本例所示:

{
    "_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()

但是,由于数据库中存储的regernator文档如下所示(使用mongod调试):

{
    "_id": ObjectId("565b89d355c40f6355fa5f45"),
    "material": "aisi304"
}

我想我会取得这样的成就:

{
    "_id": ObjectId("565b89d355c40f6355fa5f45"),
    "material": {
        "_id": ObjectId("565b84dc55c40f63392ffdee"),
        "title": "aisi304"
    }
}

tutorial provided in the docs中,它们传递对新创建文档的引用。但是,这不适合我,因为我需要参考现有的文件。在

我做错什么了?在


Tags: 文件thein文档id数据库定义title
1条回答
网友
1楼 · 发布于 2024-09-30 08:22:20

你做错了。{{cd2>将引用保存为

演示

class Materials(Document):
    title = StringField(unique=True, required=True)

class Regenerators(Document):
    material = ReferenceField(Materials, required=True)

m = Materials(title='aisi304').save()

r = Regenerators(material=m).save()

那么你的文件是这样的:

^{pr2}$

如果要使用对现有文档的引用,则需要使用^{}方法发出查询,然后将其作为参数传递给Regenerators

m = Materials.objects.get(title='aisi304')
r = Regenerators(material=m).save()

相关问题 更多 >

    热门问题