2016-11-16 121 views
1

我有此架構:貓鼬推動在陣列中的子文檔嵌套

var UserSchema = new Schema({ 
    profile: { 
    firstName: {type: String, trim: true, required: true }, 
    lastName: {type: String, trim: true, required: true }, 
    city: {type: String} 
    age: {type: Number, min: 13, max: 120}, 
    image: {type: String,trim: true} 
    }, 
    friends:{ 
    accepted:[{ 
     id: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
     dateAccepted: {type: Date, default: Date.now} 
    }] 
    } 
} 

如何可以與.update方法friends.accepted推送數據?

我只能用findOne方法成功:

User.findOne({ 
    _id: id 
    },function(err,user){ 
    user.friends.accepted.push(newUser._id); 
    user.save(function(err){if(err) return err;}) 
    }); 

回答

0

這應該工作:

User.findOneAndUpdate({ 
    _id: id 
}, { 
    $push: { 
    "friends.accepted": { 
     id: newUser._id 
    } 
    } 
}, 
{ 
    new: true 
}, 
function (err, user) { 
    console.log(err, user); 
}); 

您還可以使用User.update,但回調的第二個參數是結果更新查詢:{ ok: 1, nModified: 1, n: 1 }

使用findOneAndUpdate可讓您獲取用戶對象。在選項中傳遞new: true可讓您獲取更新的用戶對象,而如果沒有它,您將獲得原始內容。

+0

我找到了答案,更新,這是 _id:newUser._id 即使在我的模型中它的ID –