-2

Я пытаюсь обновить модель мангуста. Имеют некоторые трудности. Так выглядит моя схема прямо сейчас.Обновление/схема Mongoose

Я хочу, чтобы у пользователя была библиотека, состоящая из множества песен. Эти песни могут быть в нескольких библиотеках пользователей. А также может быть в нескольких плейлистах, из которых пользователь может иметь несколько.

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 для песни нет в базе данных, она должна добавить ее со всей информацией. Если это не так, то он добавит в библиотеку (в которой каждый пользователь имеет один из) идентификатор библиотеки UNLESS, который уже содержит это значение.

Это работает очень хорошо. Проблема, с которой я столкнулся сейчас, - это когда он находит URL-адрес, я хочу, чтобы он добавил в плейлист плейлистId текущего плейлиста, если он еще не находится в массиве, и если он есть, и ему было передано новое значение для позиции (пользователь может изменить порядок воспроизведения), он должен изменить значение позиции.

Возможно, я не моделирую его надлежащим образом. Любые советы были бы замечательными!

ответ

0

MongooseJS содержит нечто, называемое DBRef. Я думаю, вы хотите использовать это, вместо того, чтобы обрабатывать все ссылки самостоятельно.

Для вставки, если что-то не существует, выполните сначала поиск и вставьте, если необходимо, или используйте upsert. Не уверен, поддерживает ли Mongoose Upserts, хотя ...

Смежные вопросы