我有一个名为 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" } });
但是文档没有更新。
答案 0 :(得分:4)
您将$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
文档。