2017-06-03 111 views
1

我有一個名爲ReferralHistory的模式。 它包含一組用戶和引用用戶數組。使用Mongoose從文檔中刪除數組元素

ReferralHistory

var mongoose = require('mongoose'); 
var refferalHistorySchema = new mongoose.Schema({ 
    user: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User', 
     unique: true 
    }, 

    referrals: [{ 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User' 
    }], 
}); 
var ReferralHistoryModel = mongoose.model('ReferralHistory', refferalHistorySchema); 
module.exports = { 
    referralHistory: ReferralHistoryModel 
} 

我需要刪除推介數組中的特定用戶集合中ReferralHistory [這裏我只知道,稱爲用戶ID]。如何我可以做到這一點?

編輯

收集 enter image description here

我試圖

db.referralhistories.update({ "u_referrals": "593281ef966d7f0eeb94db3d" }, { "$pull": { "u_referrals": "593281ef966d7f0eeb94db3d" } }); 

O/Penter image description here

但文件沒有更新。

回答

1

您使用$pull運算符與.update()。因此,假設referredId的價值你知道

ReferralHistoryModel.update(
    { "referrals": referredId }, 
    { "$pull": { "referrals": referredId } }, 
    { "multi": true }, 
    function(err,status) { 

    } 
) 

注意到{ "multi": true }裝置中的更新可以在收藏被應用到多個匹配的文檔。如果你真的只打算匹配和更新一個文檔,那麼你不包括該選項,因爲只更新第一個匹配是默認的。

如果您想更具體,也有「用戶」相匹配,那麼你可以做:

ReferralHistoryModel.update(
    { "user": userId, "referrals": referredId }, 
    { "$pull": { "referrals": referredId } }, 
    { "multi": true }, 
    function(err,status) { 

    } 
) 

然後比賽需要兩個值是存在,而不是任何ReferralhistoryModel與您提供的referredId匹配的文件。

+0

感謝您的回答。我嘗試了您的解決方案。但沒有得到結果。更新了 – Muhsin

+0

@Muhsin的問題,因爲您正在shell/robomongo /無論如何輸入。值是'ObjectId'而不是字符串。在shell中,您需要使用ObjectId(「593281ef966d7f0eeb94db3d」)'來匹配。然而,貓鼬會爲你投下這種類型。 –

+0

它現在工作了。非常感謝您的幫助。這對我非常有幫助。 – Muhsin