Python MongoEngine嵌入式文档中的解引用关系
我有一个使用MongoEngine的模式,看起来像这样Python MongoEngine嵌入式文档中的解引用关系,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我有一个使用MongoEngine的模式,看起来像这样 class User(db.Document) email = db.EmailField(unique=True) class QueueElement(db.EmbeddedDocument): accepts = db.ListField(db.ReferenceField('Resource')) user = db.ReferenceField(User) class Resource(db.Docum
class User(db.Document)
email = db.EmailField(unique=True)
class QueueElement(db.EmbeddedDocument):
accepts = db.ListField(db.ReferenceField('Resource'))
user = db.ReferenceField(User)
class Resource(db.Document):
name = db.StringField(max_length=255, required=True)
current_queue_element = db.EmbeddedDocumentField('QueueElement')
class Queue(db.EmbeddedDocument):
name = db.StringField(max_length=255, required=True)
resources = db.ListField(db.ReferenceField(Resource))
queue_elements = db.ListField(db.EmbeddedDocumentField('QueueElement'))
class Room(db.Document):
name = db.StringField(max_length=255, required=True)
queues = db.ListField(db.EmbeddedDocumentField('Queue'))
我想返回一个Room对象的JSON对象,该对象将包括关于其队列的信息(以及引用的资源)和嵌套的queue_元素(以及它们引用的“accepts”引用和用户引用)
但是,当我要返回已取消引用其关系的房间时:
room = Room.objects(slug=slug).select_related()
if (room):
return ast.literal_eval(room.to_json())
abort(404)
我没有收到任何取消引用的消息。我得到:
{
"_cls":"Room",
"_id":{
"$oid":"552ab000605cd92f22347d79"
},
"created_at":{
"$date":1428842482049
},
"name":"second",
"queues":[
{
"created_at":{
"$date":1428842781490
},
"name":"myQueue",
"queue_elements":[
{
"accepts":[
{
"$oid":"552aafb3605cd92f22347d78"
},
{
"$oid":"552aafb3605cd92f22347d78"
},
{
"$oid":"552ab1f8605cd92f22347d7a"
}
],
"created_at":{
"$date":1428849389503
},
"user":{
"$oid":"552ac8c7605cd92f22347d7b"
}
}
],
"resources":[
{
"$oid":"552aafb3605cd92f22347d78"
},
{
"$oid":"552aafb3605cd92f22347d78"
},
{
"$oid":"552ab1f8605cd92f22347d7a"
}
]
}
],
"slug":"secondslug"
}
即使我正在使用select_related()函数。我相信这是因为MongoEngine可能不会遵循嵌入文档上的引用。注意,如果我这样做,我实际上可以在python中取消引用:
room = Room.objects(slug=slug).first().queues[0].queue_elements[0].accepts[0]
return ast.literal_eval(room.to_json())
产生
{
"_id":{
"$oid":"552aafb3605cd92f22347d78"
},
"created_at":{
"$date":1428842849393
},
"name":"myRes"
}
这显然是未引用的资源文档
是否有一种方法可以跟踪嵌入文档上的引用?或者这是因为我遵循了一种错误的模式,应该寻找一种不同的方式在MongoDB中存储这些信息(或者实际上,切换到关系数据库)?谢谢