2016-04-15 122 views
0

我有個同學的集合設置關鍵點,價值在那裏他們可以有其他的學生朋友如何在蒙戈陣列

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

要訪問好友列表我得來填充對象,數組朋友的所有對象中搜索 這需要mutch時間

我想這樣做是這樣的:

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

這將reuire我插入的對象就像這樣:

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

,但這最後一個不工作

+0

'collection.find({名稱:「有人」 }'期待成爲一名單身學生? – kiro112

回答

0

如果你除了使用MongooseMongo您可以輕鬆地做到這一點。在學生的模式,你需要的朋友,這將是剛剛ID其他學生是一個數組:

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到朋友的陣列。

一旦集合存儲的關係正常,你可以在你的API終點使用mongoose's populate方法來實際填充數據..事情是這樣的:

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

});