使用Node.js和Mongoose从JSON文件填充MongoDB中的引用集合

使用Node.js和Mongoose从JSON文件填充MongoDB中的引用集合,mongoose,mongoose-populate,Mongoose,Mongoose Populate,我使用Node.js和Mongoose从JSON文件填充MongoDB中的引用集合 var UserSchema = new Schema({ username: String, sites : [{type: mongoose.Schema.Types.ObjectId, ref: 'Site' }], }); var SiteSchema = new Schema({ user : { type: String, ref: 'User' }, siteTitle: String, pa

我使用Node.js和Mongoose从JSON文件填充MongoDB中的引用集合

var UserSchema = new Schema({
username: String,
sites : [{type: mongoose.Schema.Types.ObjectId, ref: 'Site' }], 
});

var SiteSchema = new Schema({
user : { type: String, ref: 'User' },
siteTitle: String, 
pages : [{type: mongoose.Schema.Types.ObjectId, ref: prefix + 'Page' }],
});

var PageSchema = new Schema({
site: { type: String, ref: 'Site' },
title: String,
});

exports.create = function(req, res, next) {
var user = new User(req.body);
user.save(function(err) { // create user 
    if (err) {
        return next(err);
    } else {
        var site = new Site({user: user.username, siteTitle: user.username});
        site.save(function(err) { // create website
            if (err) {
                return next(err);
            } else {
                user.sites.push(site); // push site'id in sites field in user
                user.save(); // save user after site'id has been push

                for (var i=0; i<basePages.length; i++) { // create pages from base.json file
                    var page = new Page(basePages[i]);
                    page.save(function(err) { // create page
                        if (err) {
                            return next(err);
                        } else {
                            site.pages.push(page);
                            site.save();
                        }
                    });
                   res.json(user);
                }
            }
        });
    };
});
};

以下是我自己找到的解决方案:只需在page.save函数中添加page作为参数

exports.create = function(req, res, next) {
var user = new User(req.body);
user.save(function(err) { // create user 
    if (err) {
        return next(err);
    } else {
        var site = new Site({user: user.username, siteTitle: user.username});
        site.save(function(err) { // create website
            if (err) {
                return next(err);
            } else {
                user.sites.push(site); // push site'id in sites field in user
                user.save(); // save user after site'id has been push
                for (var i=0; i<basePages.length; i++) { // create pages from base.json file
                    var page = new Page(basePages[i]);
                    page.save(function(err, **page**) { // create page
                        if (err) {
                            return next(err);
                        } else {
                            site.pages.push(**page**);
                            site.save();
                        };
                    });
                };
                res.json(user);
            };
        });
    };
});
};

你的问题有点不清楚,你想实现什么,失败了什么?我已经添加了模式,让问题更清楚。我尝试的是将从Json文件创建的页面ID填充到SiteSchema内的页面中。似乎是site.pages.pushpage的循环;site.save;为每个i返回相同的页面ID
exports.create = function(req, res, next) {
var user = new User(req.body);
user.save(function(err) { // create user 
    if (err) {
        return next(err);
    } else {
        var site = new Site({user: user.username, siteTitle: user.username});
        site.save(function(err) { // create website
            if (err) {
                return next(err);
            } else {
                user.sites.push(site); // push site'id in sites field in user
                user.save(); // save user after site'id has been push
                for (var i=0; i<basePages.length; i++) { // create pages from base.json file
                    var page = new Page(basePages[i]);
                    page.save(function(err, **page**) { // create page
                        if (err) {
                            return next(err);
                        } else {
                            site.pages.push(**page**);
                            site.save();
                        };
                    });
                };
                res.json(user);
            };
        });
    };
});
};