2014-03-07 32 views
42

我已經定義了一個用戶貓鼬架構:如何用對象ID數組創建Mongoose模式?

var userSchema = mongoose.Schema({ 
    email: { type: String, required: true, unique: true}, 
    password: { type: String, required: true}, 
    name: { 
     first: { type: String, required: true, trim: true}, 
     last: { type: String, required: true, trim: true} 
    }, 
    phone: Number, 
    lists: [listSchema], 
    friends: [mongoose.Types.ObjectId], 
    accessToken: { type: String } // Used for Remember Me 
}); 

var listSchema = new mongoose.Schema({ 
    name: String, 
    description: String, 
    contents: [contentSchema], 
    created: {type: Date, default:Date.now} 
}); 
var contentSchema = new mongoose.Schema({ 
    name: String, 
    quantity: String, 
    complete: Boolean 
}); 

exports.User = mongoose.model('User', userSchema); 

朋友參數定義爲對象ID的數組。 換句話說,用戶將擁有包含其他用戶的ID的數組。我不確定這是否是這樣做的正確標記。

我試圖推動新的朋友,以當前用戶的朋友陣列:

user = req.user; 
    console.log("adding friend to db"); 
    models.User.findOne({'email': req.params.email}, '_id', function(err, newFriend){ 
    models.User.findOne({'_id': user._id}, function(err, user){ 
     if (err) { return next(err); } 
     user.friends.push(newFriend); 
    }); 
    }); 

但是這給了我以下錯誤:

類型錯誤:對象531975a04179b4200064daf0有沒有方法「投」

回答

6

我會試試這個。

user.friends.push(newFriend._id); 

friends: [userSchema], 

,但我不知道這是正確的。

75

如果你想用貓鼬填充功能,你應該做的:

var userSchema = mongoose.Schema({ 
    email: { type: String, required: true, unique: true}, 
    password: { type: String, required: true}, 
    name: { 
     first: { type: String, required: true, trim: true}, 
     last: { type: String, required: true, trim: true} 
    }, 
    phone: Number, 
    lists: [listSchema], 
    friends: [{ type : ObjectId, ref: 'User' }], 
    accessToken: { type: String } // Used for Remember Me 
}); 
exports.User = mongoose.model('User', userSchema); 

這樣你就可以做到這一點查詢:

var User = schemas.User; 
User 
.find() 
.populate('friends') 
.exec(...) 

你會看到,每個用戶都會有一個數組的用戶(這個用戶的朋友)。

並插入正確的做法是一樣的Gabor說:

user.friends.push(newFriend._id); 
+0

但隨後創建一個數組,看起來像'[{ 「$ OID」: 「dfdfsdfsg565ls」},...]'而不是' [「hkugh87tgkgk」,....]' – CodyBugstein

+1

這就是它應該是的,ObjectIds的列表。貓鼬已經處理它們。 –

+0

'populate()'做了什麼? –