Mongodb Mongoose更新/模式设计

Mongodb Mongoose更新/模式设计,mongodb,database-design,mongoose,relational-database,database,Mongodb,Database Design,Mongoose,Relational Database,Database,我正在尝试更新猫鼬模型。有一些困难。这就是我的模式现在的样子 我希望用户有一个由许多歌曲组成的库。这些歌曲可以在多个用户库中。也可以在多个播放列表中,用户可以拥有多个播放列表 var LibrarySchema = new Schema({ user: Schema.ObjectId }); var PlaylistSchema = new Schema({ title: String, description: String,

我正在尝试更新猫鼬模型。有一些困难。这就是我的模式现在的样子

我希望用户有一个由许多歌曲组成的库。这些歌曲可以在多个用户库中。也可以在多个播放列表中,用户可以拥有多个播放列表

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,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的库中,除非它已经包含该值

效果不错。我现在遇到的问题是,当它找到我希望它添加到播放列表的url时,当前播放列表的播放ID,除非它已经在数组中,并且如果它已经在数组中并且已经传递了位置的新值,则用户可以更改播放列表的顺序,它应该更改位置的值


也许我没有用一种合适的方式来建模。任何提示都会很棒

MongooseJS包含一个名为DBRef的东西。我想你应该使用它,而不是自己处理所有的引用

如果不存在某个内容,则要进行插入,请先进行查找,然后在需要时进行插入,或者使用。但不确定猫鼬是否支持上游