2014-04-25 3 views
1

MongoEngine/Flask-MongoEngine을 사용하여 Flask에서 한 번에 여러 항목을 문서에 추가 할 수 있습니까?Flags에서 MongoEngine을 사용하여 Mongodb 문서에 여러 항목을 한 번에 추가하는 방법은 무엇입니까?

내 항목이 들어있는 사전을 반복하려했습니다. 예제를 약간 단순화했으나 원래 데이터는 내 Wordpress에서 나오는 RSS 파일이며 feedparser을 통해 파싱했습니다.

하지만 문제는 분명히 데이터베이스에 저장되기 전에 항목을 보유하는 변수를 동적으로 생성 할 수 없다는 것입니다.

여기까지 제가 시도한 내용입니다.

어떻게하면 MongoDB 데이터베이스에 항목을 대량으로 추가 할 수 있습니까?

# model 
class Entry(db.Document): 
    created_at = db.DateTimeField(
     default=datetime.datetime.now, required=True), 
    title = db.StringField(max_length=255, required=True) 
    link = db.StringField(required=True) 

# dictionary with entries 
e = {'entries': [{'title': u'title1', 
        'link': u'http://www.me.com' 
        }, 
    {'title': u'title2', 
    'link': u'http://www.me.com/link/' 
    } 
] 
} 

# multiple entries via views 
i = 0 
while i<len(e['entries']): 
     post[i] = Entry(title=e['entries'][i]['title'], link=e['entries'][i]['title']) 
     post[i].save(); 
     i += 1 

편집 1 :

내가 mongoengine가 이해할 수있는 형태로 사전을 alltogether 변수를 생략하고 번역에 대해 생각했다.

newList = [RSSPost(title="test1", link="http://www.google.de"), 
      RSSPost(title="test2", link="http://www.test2.com")] 

RSSPost.objects.insert(newList) 

이 작동하지만, 내 문제를 완전히 번역 할 수 있습니다 : 내가 수동으로 목록을 만들 때, 나는 MongoDB를로 한꺼번에 입력 할 수 있기 때문에

.

나는
f = [] 

for x in e['entries']: 
    f.append("insert " + x['link'] + " and " + x['title']) 

을 시도하지만, 당신이 보는 나는 내가 필요로하는 목록을 다시 만들 수 없었다.

올바르게 수행하는 방법은 무엇입니까?

+0

가능한 중복 내가 모르는 뭔가가 아니에요만큼 오랫동안 같은 Entry 객체를 생성 할 수 있어야한다 15143482/multi-document-insert-using-mongoengine-into-mongodb - 해당 솔루션이 적용 가능한지 확인하겠습니다. – mcbetz

+0

나는 그것이 중복이 아니라고 말할 것이다. 다른 질문에는 반복 가능한 항목이 포함되어 있지 않으며 제공된 답변으로 해결할 수 없습니다. – mcbetz

답변

4
# dictionary with entries 
e = {'entries': [{'title': u'title1', 
        'link': u'http://www.me.com' 
        }, 
    {'title': u'title2', 
    'link': u'http://www.me.com/link/' 
    } 
] 
} 

게시 한 예와 데이터/사례는 어떻게 다릅니 까?

entries = [] 
for entry in e['entries']: 
    new_entry = Entry(title=entry['title'], link=entry['link']) 
    entries.append(new_entry) 

Entry.objects.insert(entries) 
+0

감사합니다. 제 생각과 제공된 링크가 누락 된 링크라고 생각합니다. – mcbetz

2

빠르고 쉬운 방법 : http://stackoverflow.com/questions/의

for i in e['entries']: 
    new_e = Entry(**i) 
    new_e.save()