用Mongoose从文档中删除一个数组元素

我有一个名为ReferralHistory的模式。 它包含一组用户和引用用户的数组。

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]。我可以如何实现这个?

编辑

采集 在这里输入图像说明

我试过了

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

O / P 在这里输入图像说明

但文件没有更新。

您使用$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 ReferralhistoryModel文档。