2012-04-13 3 views
1

"노드", "링크"는 저장할 수 있지만 "그래프"는 저장할 수 없습니다 (아래 오류 참조). pymongo 2.1.1을 사용하여 은 장고 - NoRel, 파이썬 2.7 : - :Django-NoRel에서 중첩 모델을 저장하면 "인코딩 할 수 없습니다"오류가 발생합니다.

/Library/Python/2.7/site-packages/pymongo

from django.db import models 
from djangotoolbox.fields import SetField, ListField, EmbeddedModelField 

class Graph(models.Model): 
    links = ListField(EmbeddedModelField('Link')) 

class Link(models.Model): 
    parent = EmbeddedModelField('Node') 
    child = EmbeddedModelField('Node') 

class Node(models.Model): 
    extent = SetField() # set of strings e.g. "Gene-Bmp4" 
    intent = SetField() # set of strings 

n1 = Node(extent=set(["Gene-bmp4"]),intent=set(["Attr1", "Attr2"])) 
n2 = Node(extent=set(["Gene-fp4"]),intent=set(["Attr3", "Attr4"])) 
link = Link(parent=n1, child=n2) 
links = [link] 
g = Graph(links=links) 
g.save() 

오류를 발생 -2.1.1-py2.7-macosx-10.7-intel.egg/pymongo/collection.py : 312 : RuntimeWarning : 인코딩 할 수 없습니다 - 파이썬 모듈을 다시로드하고 다시 시도하십시오. 당신이 InvalidDocument 예외를받지 않고이 표시되는 경우 참조하십시오 api.mongodb.org/python/current/faq.html#does-pymongo-work-with-mod-wsgi

Exception Type:  InvalidDocument 
Exception Value: Cannot encode object: set(['Attr2', 'Attr1']) 
Exception Location:  /Library/Python/2.7/site-packages/pymongo-2.1.1-py2.7-macosx-10.7-intel.egg/pymongo/collection.py in insert, line 312 

누군가가 무엇을해야 어떤 생각을 가지고 있습니까 나는한다??

답변

1

여기서 문제는 BSON이 '설정'유형이 아니므로 '설정'유형의 객체를 BSON으로 인코딩 할 수 없다는 것입니다.

그래프를 저장하기 전에 가장 좋은 해결책은 집합을 배열로 변환하는 것입니다.