0
我試圖保存對數據庫的MP3引用。我將藝術家,歌曲和專輯保存到各自的模式中,並通過ReferenceFields在它們之間引用。Mongoengine和add_to_set似乎沒有工作
我使用eyeD3解析id3數據,如果有的話,並將其保存到數據庫。我的問題是,我想同時保存所有三種模式類型,但我可能會以錯誤的方式處理它。我使用python 2.7.10。
示例模式:
class Artist(db.Document):
"""Schema for Artist"""
name = db.StringField(max_length=255, required=True, unique=True)
albums = db.ListField(db.ReferenceField('Album'))
songs = db.ListField(db.ReferenceField('Song'))
def __unicode__(self):
return self.name
class Album(db.Document):
"""Schema for albums"""
title = db.StringField(max_length=255, required=True, unique=True)
artist = db.ReferenceField(Artist)
songs = db.ListField(db.ReferenceField('Song'))
def __unicode__(self):
return self.title
class Song(db.Document):
"""Schema for songs"""
title = db.StringField(max_length=255, required=True, unique=True)
artist = db.ReferenceField(Artist)
album = db.ReferenceField(Album)
path = db.StringField(max_length=255, required=True)
def __unicode__(self):
return self.title
以及碼保存到DB:
for root, dirs, files in os.walk(dir):
for f in files:
if '.mp3' in f:
id3 = eyed3.load(os.path.join(root, f))
song = Song(title=id3.tag.title, path=os.path.join(root, f))
album = Album(title=id3.tag.album)
artist = Artist(name=id3.tag.artist)
song.save()
album.save()
artist.save()
Artist.objects(id=artist.id).update(add_to_set__albums=album, add_to_set__songs=song)
Album.objects(id=album.id).update(artist=artist, add_to_set__songs=song)
Song.objects(id=song.id).update(artist=artist, album=album)
保存後,add_to_set僅保存一個目的是每ListField代替推到端。
我很難搞清楚如何正確地做到這一點。任何幫助,將不勝感激。謝謝