Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose:子文档上的实例方法_Node.js_Mongodb_Mongoose_Subdocument - Fatal编程技术网

Node.js Mongoose:子文档上的实例方法

Node.js Mongoose:子文档上的实例方法,node.js,mongodb,mongoose,subdocument,Node.js,Mongodb,Mongoose,Subdocument,考虑一张包含许多歌曲的专辑。我将唱片集模式定义为将歌曲作为子文档 但我不确定如何为子文档创建实例方法 考虑以下模式: // Sub Document var SongSchema = new mongoose.Schema({ title : {type: String}, artist : {type: String}, genre : {type: String} }); // Parent Do

考虑一张包含许多歌曲的专辑。我将唱片集模式定义为将歌曲作为子文档

但我不确定如何为子文档创建实例方法

考虑以下模式:

// Sub Document
var SongSchema = new mongoose.Schema({
    title           :   {type: String},
    artist          :   {type: String},
    genre           :   {type: String}
});

// Parent Document
var AlbumSchema = new mongoose.Schema({
    title           :   {type: String, required: true},
    composer        :   {type: String},
    songs           :   [songSchema],
});


AlbumSchema.methods.addSong = function(data) {
    var song = {
        title       : data.title,
        artist      : data.artist,
        genre       : data.genre
    }
    this.songs.push(song);
    return;
};


SongSchema.pre('validate', function(next) {
    // I would like to call the someFunction as below. 
    // But how do I achieve this?

    this.someFunction();        // Errors ??
});

SongSchema.methods.someFunction = function() {
    // Some function
};

var album = new Album ({
                            title: 'T1',
                            composer: 'C1'
                        });
album.addSong ({title: 'S1', artist: 'A1', genre: 'G1'});   // Success

我可以知道我们如何在子文档上实现实例方法吗?

与使用
AlbumSchema
的方法相同。只需确保您在
Song
model的实例上访问它。谢谢。。我最初尝试了与
AlbumSchema
相同的方法。但是我注意到名为
的歌曲集是在MongoDB中创建的。我不想有一个孤儿收藏。但后来我意识到我在尝试一些歌曲。保存,这会导致收藏被创建。有没有一种方法可以创建mongoose模型,但不能在Mongo中创建集合?mongoose会根据模式创建集合。您可以做的是将模型定义为Javascript对象,并将其嵌入到您的
相册模式中。我想我能让你知道我在说什么。