-2

我正在嘗試更新貓鼬模型。有一些困難。這就是我的模式現在的樣子。貓鼬更新/架構設計

我想讓用戶擁有一個由許多歌曲組成的庫。這些歌曲可以在多個用戶庫中。也可以在用戶可以有多個播放列表的多個播放列表中。

var LibrarySchema = new Schema({ 
     user: Schema.ObjectId 
    }); 


    var PlaylistSchema = new Schema({ 
     title: String, 
     description: String, 
     //songs: [SongsSchema], 
     user: Schema.ObjectId 
    }); 


    var SongsSchema = new Schema({ 
     name: String, 
     artist: String, 
     album: String, 
     time: Number, 
     url: String, 
     gid: String, 
     location: String, 
     playlist: [{playlist_id:Schema.ObjectId, position: Number}], 
     library: [Schema.ObjectId] 
    }); 

現在我要像做檢查,如果該URL中的歌曲模式已經存在(網址是索引)。如果那首歌不存在,我想用所有的值添加它。但是,如果歌曲存在,我想追加播放列表並將其放入庫中。

例如這裏是我現在想查詢:

Song.update({url: s.url, "playlist.playlist_id": playlistId}, {$set: {name: s.name, artist: s.artist, album: s.album, time: s.time, url: s.url}, $addToSet: {playlist: {playlist_id: playlistId, position: s.position}, library: libId}},{upsert: true}, function(err, data) {}); 

這是存儲在數據庫中的樣本:

{ "name" : "Kanye West - All Of The Lights ft. Rihanna, Kid Cudi", "artist" : "unknown", "album" : "unknown", "time" : 328, "url" : "HAfFfqiYLp0", "_id" : ObjectId("4f127923ce0de70000000009"), "library" : [ ObjectId("4f1203af23c98cfab1000006") ], "playlist" : [ 
{ 
    "playlist_id" : ObjectId("4f127923ce0de70000000007"), 
    "position" : "1" 
} 
] } 
{ "name" : "Kanye West - Heartless", "artist" : "unknown", "album" : "unknown", "time" : 221, "url" : "Co0tTeuUVhU", "_id" : ObjectId("4f127923ce0de7000000000a"), "library" : [ ObjectId("4f1203af23c98cfab1000006") ], "playlist" : [ 
{ 
    "playlist_id" : ObjectId("4f127923ce0de70000000007"), 
    "position" : "2" 
} 
] } 
{ "name" : "Kanye West - Stronger", "artist" : "unknown", "album" : "unknown", "time" : 267, "url" : "PsO6ZnUZI0g", "_id" : ObjectId("4f127923ce0de7000000000b"), "library" : [ ObjectId("4f1203af23c98cfab1000006") ], "playlist" : [ 
{ 
    "playlist_id" : ObjectId("4f127923ce0de70000000007"), 
    "position" : "3" 
} 
] } 

現在是如果URL什麼,我試圖做對於歌曲不在數據庫中,它應該添加所有信息。如果不是,那麼它將添加到庫(每個用戶都有)庫ID,除非它已經包含該值。

這很好。我現在遇到的問題是,它發現我想要它添加到播放列表的網址當前播放列表的playlistId,除非它已經在數組中,並且如果它是並且傳遞了一個新的位置值(用戶可以更改播放列表的順序),它應該改變位置的值。

也許我不是以適當的方式建模它。任何提示都會很棒!

回答

0

MongooseJS包含一些名爲DBRef的東西。我想你想使用它,而不是自己處理所有的參考。

如果插入的東西不存在,可以先查找並插入(如果需要),或者使用upsert。不知道Mongoose是否支持Upserts ...