2016-04-15 3 views
0

У меня есть коллекция студентов, где они могут иметь и другие студент, как друзьякак установить ключ, значение в массиве Монго

{name:'someone', email:'st', friends[ObjectId,ObjectId]} 

Чтобы получить доступ к списку друзей я должен заполнить этот объект и поиск внутри всех объектов друзей массива это займет чепчик время

что я хотел бы сделать это:

collection.find({name:'someone'},function(err,obj){ 
    if(obj['user1']) 
    //do st 
    else 
    //do st 
}) 

это reuire, что я вставить объект s, как это:

collection.find({name:'st'},function(err,obj){ 
    obj.friends['some one']=ObjectId(of an other student) 
}) 

, но этот последний не работает

+0

'collection.find ({имя:«кто-то» } 'ожидает, что он будет единственным учеником? – kiro112

ответ

0

Вы можете легко сделать это, если вы используете Mongoose в дополнение к Mongo. В вашей студентов схеме вам нужен массив друзей, которые будут только идентификаторы других студентов:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var StudentSchema = new Schema({ 
    name: String, 
    friends: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Student' }] 
}); 

module.exports = mongoose.model('Student', StudentSchema); 

Тогда при добавлении друга все, что вам нужно сделать, это нажать на ID этого друга в массив друзей.

После магазинов коллекционных отношения правильно, вы можете использовать mongoose's populate метод фактического заполнения в данных в вашем API конечной точки .. Что-то вроде этого:

app.get('/student/:id, function(req, res){ 
    Student.find({_id: req.params.id}) 
    .populate('friends') 
    .exec(function(err, student){ 
    if(err){ 
    // handle error 
    } else { 
     res.json(student) 
    } 
    }) 

}); 
Смежные вопросы