我有一个名为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" } });
但是文档没有更新。
最佳答案
您使用 $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) {
}
)
然后,匹配需要同时存在两个值,而不是与您提供的 referredId
匹配的任何 ReferralhistoryModel
文档。
关于node.js - 使用 Mongoose 从文档中删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44342181/