2015-04-22 3 views
0

Я Наполнение ссылается коллекции в MongoDB из JSON файлов с помощью Node.js и MongoosePopulating ссылки коллекции в MongoDB из JSON файлов с помощью Node.js и Mongoose

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); 
       } 
      } 
     }); 
    }; 
}); 
}; 

Страницы хорошо созданы из файла JSON и страниц поле в документе сайта заполнено, но у меня есть только один идентификатор. Я имею в виду мой файл JSON имеет 2 страницы так что я получаю

страницы: «_id123456», «_id123456» от

site.pages.push(page); 
site.save(); 
+1

Ваш вопрос немного неясен, чего вы пытаетесь достичь и что не удается? – chridam

+0

У меня есть Схемы, чтобы сделать вопрос более ясным. Я пытаюсь заполнить идентификаторы страниц, созданные из файла Json, на «страницы» внутри SiteSchema. Кажется, что петли с site.pages.push (страница); site.save(); возвращает одинаковые идентификаторы страниц для каждого i – ZeGregg

ответ

0

Вот решение, которое я нашел себя :) просто добавить страницу в качестве аргумента в page.save функция;

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); 
      }; 
     }); 
    }; 
}); 
};