-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が既に曲のスキーマ(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にライブラリIDを追加します(それぞれのユーザはライブラリIDを持ちます)。

それはかなりうまくいきます。私が今問題を抱えているのは、現在のプレイリストのplaylistIdをプレイリストに追加したいURLが見つかったときです。すでに配列に入っていないかぎり、新しい位置の値が渡されていない限りプレイリストの順番)は、位置の値を変更する必要があります。

おそらく私はそれを適切な方法でモデル化していません。すべてのヒントは素晴らしいだろう!

答えて

0

MongooseJSにはDBRefという名前が含まれています。私は、自分ですべての参照を処理する代わりに、それを使いたいと思う。

何かがない場合は、最初に検索して必要に応じて挿入するか、upsertを使用してください。モンゴースがUpsertsをサポートしているかどうかはわかりません...