2016-05-26 8 views
0

У меня есть коллекция вопросов, и у меня есть модель магазина. Я хочу, чтобы поле вопросов в модели Store представляло собой массив идентификаторов объектов из коллекции вопросов. поэтому я мог бы использовать заполнение позже. когда я буду делать app.get в будущем, он должен показать мне документ с информацией о магазине и всеми вопросами.как заполнить документ mongoose или сохранить ссылки

var Schema = mongoose.Schema; 

var storeSchema = Schema({ 
    name : {type : String}, 
    industry : {type : String}, 
    questions :[{type : Schema.Types.ObjectId, ref : "Questions" }] 
}) 

var questionsSchema = Schema({ 
    question : {type :String} 
}) 

var store = mongoose.model("Store", storeSchema); 
var questions = mongoose.model("Questions", questionsSchema) 

// questions.create({question: "question2"}, function(err,q){ 
//  console.log("create: " , q) 
// }) 
//something like this 
questions.find({}, function(err, doc){ 
    store.create({name : "store 1", industry : "industry 1" , questions : /*get the _ids from the question collection*/ {$push : doc.question}}) 
}) 


> db.questions.find().pretty() 
{ 
     "_id" : ObjectId("574534a289763c004643fa08"), 
     "question" : "question1", 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("574534acc90f3f2c0c3d529b"), 
     "question" : "question2", 
     "__v" : 0 
} 
> 
+0

@jack_blank вы нашли решение для этого? –

ответ

0

населения является процесс автоматической замены указанных путей в документе с документом (ами) из другой коллекции (ов). Мы можем заполнить единый документ, несколько документов, простой объект, несколько простых объектов или все объекты, возвращаемые из запроса.

var question = new Questions(); 
    question.save(function(err) { 
     var store = new Store({ 
      name:'sample', 
      industry:'tech', 
      questions: [question._id], 
     }); 
     store.save(function(err){ 
     //do whatever you would like, post creation of store. 
     }); 
    }); 

    Store.find(...).exec(function(err, stores) { 
    Questions.populate(stores, function(err, storesPostPopulate) { 
     // Now you have Stores populated with all the questions. 
    }) 
    }); 

Поскольку поле вопросов в вопросительной схеме представляет собой массив, вы всегда можете нажать на него другой идентификатор вопроса.

See mongoose populate

See mongoose Model populate

+0

Вы не можете просто сделать это. вам нужно задать «вопросы». Doc называет «сохранение ref», так что это моя проблема. Я не знаю, как это сделать. –

+0

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

+0

и заполнить ожидает строку. 'TypeError: utils.populate: неверный путь. Ожидаемая строка. Получил тип «функции» ' –

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

  • Нет связанных вопросов^_^