用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
文档。